我正在测试一个使用众多代理的网站,但问题是其中一些代理非常慢。因此,我的代码偶尔会陷入加载页面的困境。
from selenium import webdriver
browser = webdriver.Firefox()
browser.get("http://example.com/example-page.php")
element = browser.find_element_by_id("someElement")
我已经尝试了很多方法,例如显式等待
或隐式等待
,并且一直在搜寻解决方案或变通方法。但似乎没有什么能够真正影响页面加载行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()
这样的页面加载没有作用,虽然它不会一直阻塞直到新页面完全加载,another_element = browser.find_element_by_id("another_element")
是一个新的麻烦,因为无论是显式等待还是隐式等待都要等待整个页面加载完成才开始查找该元素。在极端情况下,这可能需要甚至几个小时。我该怎么办?
pageLoadTimeout()
?为什么没有人将其放入更改日志中?太棒了,我等了这么久 :) - Petr Janeček