我遇到了一个有问题的页面导致MacOSX上的Selenium Chrome(python 3中的selenium版本3.10.0,chromedriver版本2.35.528157)超时,我认为因为页面上有无限期加载的内容。问题是,在超时之后,所有未来向驱动程序发出的请求.get()一个新的url也会因超时而失败,即使它们之前有效。事实上,观察浏览器它永远不会发送到新的URL。当然,这会使浏览器无法用于进一步的会话。
如何“重置”驱动程序以便我可以继续使用它?或者失败了,如何在访问有问题的页面后调试.get()命令似乎不起作用的原因。代码和我的输出如下(有问题的页面是http://coastalpathogens.wordpress.com/2012/11/25/onezoom/
:如果其他人看到相同的内容,并且其他页面也是如此,我会感兴趣
from selenium import webdriver
from selenium.common.exceptions import TimeoutException
browser = webdriver.Chrome()
browser.set_page_load_timeout(10)
browser.implicitly_wait(1)
for link in ("http://www.google.com", "http://coastalpathogens.wordpress.com/2012/11/25/onezoom/","http://www.google.com"):
try:
print("getting {}".format(link))
browser.get(link)
print("done!")
except TimeoutException:
print("Timed out")
continue
结果:
getting http://www.google.com
done!
getting http://coastalpathogens.wordpress.com/2012/11/25/onezoom/
Timed out
getting http://www.google.com
Timed out
答案 0 :(得分:2)
根据您的问题和您自己的代码块,我已经执行了您自己的代码,通过 chrome.options 类调整了几个 ChromeDriver 设置,如下所示 > perfecto :
代码块:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.common.exceptions import TimeoutException
options = Options()
options.add_argument("start-maximized")
options.add_argument("disable-infobars")
options.add_argument("--disable-extensions")
browser = webdriver.Chrome(chrome_options=options, executable_path=r'C:\Utility\BrowserDrivers\chromedriver.exe')
browser.set_page_load_timeout(10)
for link in ("http://www.google.com", "http://coastalpathogens.wordpress.com/2012/11/25/onezoom/","http://www.google.com"):
try:
print("getting {}".format(link))
browser.get(link)
print("done!")
except TimeoutException:
print("Timed out")
continue
控制台输出:
getting http://www.google.com
done!
getting http://coastalpathogens.wordpress.com/2012/11/25/onezoom/
done!
getting http://www.google.com
done!
您需要考虑以下几点:
set_page_load_timeout()
,同时调用网址,例如{em>浏览器客户端 http://coastalpathogens.wordpress.com/2012/11/25/onezoom/
可能需要更多 10秒(即配置的set_page_load_timeout(10)
时间)才能将document.readyState equal to "complete"
发送到硒 如果 usecase 依赖于页面加载超时,请捕获异常并调用quit()
以正常关闭,如下所示:
from selenium import webdriver
driver = webdriver.Chrome(executable_path=r'C:\path\to\chromedriver.exe')
driver.set_page_load_timeout(2)
try :
driver.get("https://www.booking.com/hotel/in/the-taj-mahal-palace-tower.html?label=gen173nr-1FCAEoggJCAlhYSDNiBW5vcmVmaGyIAQGYATG4AQbIAQzYAQHoAQH4AQKSAgF5qAID;sid=338ad58d8e83c71e6aa78c67a2996616;dest_id=-2092174;dest_type=city;dist=0;group_adults=2;hip_dst=1;hpos=1;room1=A%2CA;sb_price_type=total;srfid=ccd41231d2f37b82d695970f081412152a59586aX1;srpvid=c71751e539ea01ce;type=total;ucfs=1&#hotelTmpl")
print("URL successfully Accessed")
driver.quit()
except :
print("Page load Timeout Occured. Quiting !!!")
driver.quit()
控制台输出:
Page load Timeout Occured. Quiting !!!
您可以在How to set the timeout of 'driver.get' for python selenium 3.8.0?
set_page_load_timeout()
的详细讨论
考虑用ExplicitWait替换implicitly_wait()
的使用情况。现代网站使用 JavaScript , Ajax Calls 和 React Native ,其中 WebDriverWait 将会发挥作用,您可以使用。将implicitly_wait()
与WebDriverWait()
混合起来。