【问题标题】:python + selenium - focus to make infinite scroll loadpython + selenium - 专注于无限滚动加载
【发布时间】:2021-02-15 18:37:56
【问题描述】:

我正在从无限滚动网站的顶部抓取有限数量的项目。

links = driver.find_elements_by_xpath("//div[@class='fixed-recipe-card__info']//a")
while len(links)<100:
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    links = driver.find_elements_by_xpath("//div[@class='fixed-recipe-card__info']//a")

当窗口处于活动状态时,这非常有效。但是,如果我将测试浏览器最小化,则不会加载新内容并且循环会无限运行。我对硒很陌生,所以我不太清楚为什么。我怀疑有一个 Javascript onChange 没有被触发。是否有我应该添加到我的脚本中的 javascript 命令,或另一个会导致新内容加载的 selenium 命令?

我正在使用 Python 2.7,selenium 和 Chromedriver。一个示例站点是allrecipes.com

【问题讨论】:

    标签: javascript python selenium


    【解决方案1】:

    您是否因为忙于其他事情而将其最小化?一旦您的代码在视觉上执行您想要的操作并避免此问题,您就可以使用无头模式。

    【讨论】:

    • Headless 正是我不知道我需要的,谢谢!
    • 怎么做?
    • @Dev_Man 谷歌搜索“python selenium headless Chrome”应该可以帮助您。
    【解决方案2】:

    顺便说一句,如果最小化窗口是一个大问题,您应该尝试使用 PhantomJs 作为驱动程序。它基本上与 chrome 驱动程序的工作方式相同,但它不使用浏览器,因此您的所有代码都将在后台运行,它对我有用。它可能对您有用,编码愉快! http://phantomjs.org

    【讨论】:

    • Phantomjs 不再积极维护,因为 Google 发布了具有无头功能的 Chrome,并且 Phantomjs 的负责人离开了该项目。对于抓取,它可能在不久的将来仍然有效,但对于自动化测试和持续的兼容性,最好使用最终用户实际使用的浏览器(chrome),而不是没有最终用户正在浏览的浏览器(phantomjs) .
    【解决方案3】:

    正如您所提到的,测试浏览器已最小化,新内容不会加载是非常符合预期的,因为 Selenium 需要 关注 浏览窗口 与 DOM 元素交互。

    原因

    此时值得一提的是,网页可以在失去焦点时改变其内容。您需要考虑 Selenium 主要是为测试而设计的事实

    解决方案

    理想情况下,自动测试执行网页抓取必须在一个独立的测试环境最好在配置了所需硬件软件测试实验室中> 必须不受手动干预的配置。

    【讨论】:

    • OP 在问题的任何地方都没有说他们正在执行自动化测试。他们提到他们正在抓取,并且由于大多数家庭用户没有方便的隔离环境,我不明白您的回答如何解决这个问题。
    猜你喜欢
    • 2020-12-18
    • 1970-01-01
    • 1970-01-01
    • 2017-11-15
    • 2017-09-12
    • 2018-05-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多