【问题标题】:How to select the first N website elements matching one CSS selector in python selenium?如何在python selenium中选择与一个CSS选择器匹配的前N个网站元素?
【发布时间】:2018-06-21 13:57:43
【问题描述】:

我在 python/selenium 设置中使用 phantomJS 进行屏幕抓取。 具体来说,我需要匹配一个 CSS 选择器的前 N ​​个元素。

挑战在于网站中存在的匹配元素是原来的两倍多,因此下面的调用耗时太长(速度是我的主要要求):

targets =  WebDriverWait(driver, 1).until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, css_selector)))

有没有办法为找到的元素定义一个截止点,例如:

EC.presence_of_all_elements_located((By.CSS_SELECTOR, css_selector[0:N])))

我之前没有 CSS 选择器的解决方案是在一次调用中复制所有 html,将其转换为文本,然后通过文本解析获取感兴趣的(文本)元素,使用单词字典来保留/删除。这快了 4 倍以上。但是,这不适合/可扩展,因为需要维护 dict。

如何在python selenium中选择与一个CSS选择器匹配的前n个网站元素?

【问题讨论】:

    标签: python css selenium screen-scraping


    【解决方案1】:

    尝试以下解决方案以获得所需的匹配节点数:

    n_elements = WebDriverWait(driver, 1).until(lambda driver: driver.find_elements_by_css_selector('css_selector')[:N])
    

    【讨论】:

    • 非常感谢 - 就像一个魅力。我还遇到了另一种解决方案,使用 position() 在选择器中定义范围 - 以防其他人正在阅读此内容以供将来参考stackoverflow.com/a/48146404/6060083
    猜你喜欢
    • 2017-03-07
    • 1970-01-01
    • 1970-01-01
    • 2015-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-28
    相关资源
    最近更新 更多