当前位置: 首页 > 知识库问答 >
问题:

在Python中使用PhantomJS向下滚动到infinite页面的底部

华浩壤
2023-03-14

我已经成功地让Python使用Selenium和PhantomJS重新加载一个动态加载的无限滚动页面,如下例所示。但是,如何修改它,使程序在到达谷底时停止,而不是手动设置重新加载的次数呢?

reloads = 100000 #set the number of times to reload
pause = 0 #initial time interval between reloads
driver = webdriver.PhantomJS()

# Load Twitter page and click to view all results
driver.get(url)
driver.find_element_by_link_text("All").click()

# Keep reloading and pausing to reach the bottom
for _ in range(reloads):
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    time.sleep(pause)

text_file.write(driver.page_source.encode("utf-8"))
text_file.close()

共有1个答案

龙兴学
2023-03-14

你可以检查卷轴是否在每一步都做了什么。

lastHeight = driver.execute_script("return document.body.scrollHeight")
while True:
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    time.sleep(pause)
    newHeight = driver.execute_script("return document.body.scrollHeight")
    if newHeight == lastHeight:
        break
    lastHeight = newHeight

这使用了静态等待量,这是很糟糕的,因为您不想在它更快地完成时不必要地等待,并且您不想在由于某种原因动态负载太慢时脚本过早地退出。

由于页面通常会将一些更多的元素加载到列表中,因此可以在加载之前检查列表的长度,并等待下一个元素加载。

while True:
    elemsCount = browser.execute_script("return document.querySelectorAll('.stream-items > li.stream-item').length")

    browser.execute_script("window.scrollTo(0, document.body.scrollHeight);")

    try:
        WebDriverWait(browser, 20).until(
            lambda x: x.find_element_by_xpath(
                "//*[contains(@class,'stream-items')]/li[contains(@class,'stream-item')]["+str(elemsCount+1)+"]"))
    except:
        break

完整版供参考。

 类似资料:
  • 问题内容: 我正在尝试抓取这一(无限)页面(www.mydealz.de),但是我无法让我的网络驱动程序向下滚动页面。我正在使用Python(3.5),Selenium(3.6)和PhantomJS。我已经尝试了几种方法,但是webdriver不会滚动- 它只给我第一页。 第一种方法(常用的滚动方法): 第二种方法(只需按下几次向下键并释放它,也尝试在两次按下之间等待): 第三种方法(在“滚动列表

  • 问题内容: 考虑我有一个问题清单。当我单击第一个问题时,它应该自动带我到页面底部。 实际上,我确实知道可以使用jQuery完成此操作。 因此,您能为我提供一些文档或一些链接,以找到该问题的答案吗? 编辑:需要滚动到页面底部的特定HTML 元素 问题答案: 不需要jQuery。我从Google搜索获得的大多数热门结果都给了我这个答案: 在嵌套元素的地方,文档可能不会滚动。在这种情况下,您需要定位要滚

  • 我有一个问题清单。当我点击第一个问题时,它应该会自动把我带到页面底部。 事实上,我确实知道这可以使用jQuery来完成。 所以,你能给我一些文件或一些链接,我可以找到这个问题的答案吗? 编辑:需要滚动到页面底部的特定HTML元素

  • 请帮帮我,我想向下滚动到菜的结尾,但它停止了。我尝试的代码在这里

  • 我需要在SeleniumWebDriver中向下滚动页面直到结束。我尝试使用以下代码段向下滚动页面: 正在滚动,但我需要向下滚动到最后一页。

  • 我在Selenium 1(又名Selenium RC)中编写了以下代码,用于使用java滚动页面: Selenium 2(WebDriver)中的等效代码是什么?