我正在测试一个有很多代理的网站,问题是其中一些代理非常慢。因此,我的代码时不时地卡在加载页面上。
from selenium import webdriver
browser = webdriver.Firefox()
browser.get("http://example.com/example-page.php")
element = browser.find_element_by_id("someElement")
我已经尝试了很多类似explicit waits
或的东西,implicit waits
并且已经搜索了很长一段时间,但仍然没有找到解决方案或解决方法。似乎没有什么真正影响 page loading line browser.get("http://example.com/example-page.php")
,这就是为什么它总是卡在那里。
有人对此有解决方案吗?
更新1:
JimEvans 的回答解决了我之前的问题,在这里你可以找到这个新功能的 python 补丁。
新问题:
browser = webdriver.Firefox()
browser.set_page_load_timeout(30)
browser.get("http://example.com/example-page.php")
element = browser.find_element_by_id("elementA")
element.click() ## assume it's a link to a new page http://example.com/another-example.php
another_element = browser.find_element_by_id("another_element")
正如您所看到的,browser.set_page_load_timeout(30)
仅影响browser.get("http://example.com/example-page.php")
这意味着如果此页面加载超过 30 秒,它将抛出超时异常,但问题是它无法控制页面加载,例如element.click()
,尽管它不会阻塞直到新页面完全加载up,another_element = browser.find_element_by_id("another_element")
是新的麻烦,因为要么explicit waits
或implicit waits
将等待整个页面加载,然后再开始寻找该元素。在某些极端情况下,这甚至需要HOURS。我能做些什么呢?