在无限期加载页面上硒时,如何获取新页面



我遇到了一个有问题的页面,该页面会导致硒铬(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()

相关内容

  • 没有找到相关文章

最新更新