我遇到了一个有问题的页面,该页面会导致硒铬(Selenium版本3.10.0 in Python 3,Chromedriver版本2.35.528157(在MacOSX上超时,我认为是因为有页面上无限期加载的东西。问题在于,在超时后,所有将来向驱动程序的所有请求。实际上,在观察浏览器时,它永远不会发送到新的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
根据您的问题和您自己的代码块,我执行了您自己的代码,通过 chrome.options.options.options 调整了一些 chromedriver 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:UtilityBrowserDriverschromedriver.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!
问题和解决方案
您需要考虑以下几点:
- 直到和除非您的 USECASE 在页面加载超时上都有约束, 在调用URL时,不得在慢速网络上使用
set_page_load_timeout()
,例如。http://coastalpathogens.wordpress.com/2012/11/25/onezoom/
浏览器客户端可能需要更多,然后 10秒(即通过set_page_load_timeout(10)
的配置时间(将document.readyState equal to "complete"
发送到 selenium 。。 如果您的 USECASE 对页面加载超时,请捕获异常,并调用
quit()
优雅地关闭:from selenium import webdriver driver = webdriver.Chrome(executable_path=r'C:pathtochromedriver.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 !!!
您可以在中找到有关
set_page_load_timeout()
的详细讨论。 向上考虑通过explicitWait替换
implicitly_wait()
的使用情况。现代网站使用 javascript , ajax调用和 react atnation 其中 webdriverwait 将发挥作用,而您无法混合用WebDriverWait()
。implicitly_wait()