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

Python 将chromedriver与Selenium一起使用时,如何更正超时错误?,python,selenium,automation,timeout,selenium-chromedriver,Python,Selenium,Automation,Timeout,Selenium Chromedriver,我可能错过了一些简单的东西,但我已经尝试了很多,没有任何运气。我是硒新手,无法纠正以下问题。使用get()导航到网页时,我不断收到一条超时消息。页面加载正确,但在页面上的所有内容加载后(我认为这可能与加载广告所需的时间有关),我得到了这个错误 selenium.common.Exception.TimeoutException:消息:超时 (会话信息:chrome=65.0.3325.181) (驱动程序信息:chromedriver=2.36.540470(e522d04694c7ebea4b

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

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

我试过以下方法;移动chromedriver位置,尝试旧版本的selenium、waits、隐式waits、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()

根据您在使用get()导航到网页时提出的问题,显然,页面似乎已正确加载,但实际上,引擎盖下的JavaScripts和Ajax调用可能尚未完成,web客户端可能尚未实现
“document.readyState”
等于
“complete”

但是,您似乎已经在代码中引入了设置页面加载超时(10),如果完整的页面加载(包括JS和Ajax)没有在10秒内完成,将导致错误。你的情况就是这样

解决方案
  • 如果您的用例对页面加载超时没有限制,请删除代码行
    set\u Page\u Load\u 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()
    
  • 控制台输出:

    Page load Timeout Occured. Quiting !!!
    

您可以在

中找到有关
设置页面加载超时()的详细讨论,您有
驱动程序。在代码中设置页面加载超时(10)
。。。你知道这是怎么回事,对吧?我看的教程里没有解释过,所以我一点也没想到。德班詹布的回答纠正了我的误解。哈哈,一切都很好。我不是在问,也不是在讽刺什么,我只是想你把它放在你自己身上,知道它做了什么,如果是这样的话,我会像德班詹布在回答中那样解释Ajax问题。不过,很高兴你弄明白了!我们就是这样,我知道这是我忽略的东西。我看的教程增加了这一行,但他们从未解释原因。因此,感谢您的解释和展示示例。这纠正了问题。再次感谢DebanjanB