将Chromedriver与Selenium一起使用时,如何更正超时错误?

时间:2018-04-03 22:35:25

标签: python selenium automation timeout selenium-chromedriver

我可能会遗漏一些简单的东西,但我已经尝试了很多没有任何运气。我是硒的新手,我无法纠正以下问题。使用get()导航到网页时,我不断收到超时消息。页面加载正确,但页面上的所有内容加载后(我认为它可能与加载广告加载所需的时间有关)我收到此错误。

selenium.common.exceptions.TimeoutException:消息:超时   (会话信息:chrome = 65.0.3325.181)   (驱动程序信息:chromedriver = 2.36.540470(e522d04694c7ebea4ba8821272dbef4f9b818c91),platform = Windows NT 10.0.16299 x86_64)

我尝试了以下方法;移动chromedriver位置,尝试旧版本的selenium,等待,隐式等待,time.sleep等。任何输入都会很棒,因为这看起来很简单,我想尽快解决。

有问题的代码:

from selenium import webdriver
import time
from selenium.webdriver.common.keys import Keys

driver = webdriver.Chrome("Path\To\chromedriver.exe")
driver.set_page_load_timeout(10)

driver.get("https://www.website.com")
driver.find_element_by_name("name").send_keys("com")
driver.find_element_by_name("word").send_keys("pw")
driver.find_element_by_id("idItem").click()

driver.find_element_by_name("word").send_keys(Keys.ENTER)

#driver.implicitly_wait(10)
driver.get("https://www.website2.com")
--------------Error here, never gets past this point------------
time.sleep(10)
driver.close()

1 个答案:

答案 0 :(得分:1)

根据您的问题,当使用get()导航到网页时,可能看起来页面已正确加载,但事实上 JavaScripts < / em>和 Ajax Calls 可能尚未完成, Web Client 可能未达到 'document.readyState'等于{{1} } 也是。

但是您的代码中似乎已经引发了 set_page_load_timeout(10),导致整个页面加载(包括 JS Ajax )没有在10秒内完成将导致TimeoutException。这恰好发生在你的情况下。

解决方案

  • 如果 usecase 页面加载超时没有约束,请删除代码行"complete"
  • 如果 usecase 依赖于页面加载超时,请捕获异常并调用set_page_load_timeout(10)以正常关闭,如下所示:

  • 代码块:

    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()
    

您可以在How to set the timeout of 'driver.get' for python selenium 3.8.0?

中找到有关Page load Timeout Occured. Quiting !!! 的详细讨论