我想刮掉一个无限卷轴实现的页面的所有数据。下面的python代码可以工作。
for i in range(100):
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(5)
这意味着每当我向下滚动到底部时,我需要等待5秒,这通常足以让页面完成加载新生成的内容。但是,这可能没有时间效率。页面可以在5秒内完成新内容的加载。如何检测每次向下滚动时页面是否已完成加载新内容?如果我能检测到这一点,我可以再次向下滚动查看更多的内容,一旦我知道页面完成加载。这样更省时。
默认情况下,
webdriver
将通过.get()
方法等待加载页面。正如@user227215所说,您可能正在寻找某些特定元素,因此应该使用
WebDriverWait
来等待位于页面中的元素:我用它来检查警报。您可以使用任何其他类型方法来查找定位器。
编辑1:
我应该提到,
webdriver
将在默认情况下等待页面加载。它不会等待帧内加载或ajax请求。这意味着当您使用.get('url')
时,浏览器将等待页面完全加载,然后转到代码中的下一个命令。但是,当您发布ajax请求时,webdriver
不会等待,您有责任等待适当的时间来加载页面或页面的一部分;因此有一个名为expected_conditions
的模块。找到以下3种方法:
就绪状态
正在检查页的readyState(不可靠):
id
将新页ID与旧页ID进行比较:
staleness_of
使用
staleness_of
方法:有关详细信息,请检查Harry's blog。
试图将
find_element_by_id
传递给presence_of_element_located
的构造函数(如accepted answer所示)导致NoSuchElementException
被引发。我不得不使用fragles'comment中的语法:这与example in the documentation匹配。这是指向documentation for By的链接。
相关问题 更多 >
编程相关推荐