【问题标题】:Python Selenium. How to use driver.set_page_load_timeout() properly?蟒蛇硒。如何正确使用 driver.set_page_load_timeout()?
【发布时间】:2017-10-11 05:13:38
【问题描述】:
from selenium import webdriver

driver = webdriver.Chrome()
driver.set_page_load_timeout(7)

def urlOpen(url):
    try:
        driver.get(url)
        print driver.current_url
    except:
        return

然后我有 URL 列表并调用上述方法。

if __name__ == "__main__":
    urls = ['http://motahari.ir/', 'http://facebook.com', 'http://google.com']
    # It doesn't print anything

    # urls = ['http://facebook.com', 'http://google.com', 'http://motahari.ir/'] 
    # This prints https://www.facebook.com/ https://www.google.co.kr/?gfe_rd=cr&dcr=0&ei=3bfdWdzWAYvR8geelrqQAw&gws_rd=ssl

    for url in urls:
        urlOpen(url)

问题是当网站“http://motahari.ir/”抛出超时异常时,网站“http://facebook.com”和“http://google.com”总是抛出超时异常。

浏览器一直在等待“motahari.ir/”加载。但循环只是继续(它没有打开 'facebook.com' 但等待'motahari.ir/')并继续抛出超时异常

初始化 webdriver 实例需要很长时间,因此我将其从方法中提取出来,我认为这是导致问题的原因。那么,每当出现超时异常时,我是否应该始终重新初始化 webdriver 实例?如何? (由于我在函数外初始化了驱动,所以不能在except中重新初始化)

【问题讨论】:

  • 你为什么要在 5 秒内加载一个网页......这很难......
  • 我认为这不应该发生。一切似乎都是正确的,(除了你还没有导入By)这可能只是因为你的互联网很慢或者网站的服务器很慢......
  • “但是循环一直在继续(它没有打开'b.net',而是等待'a.com')并不断抛出超时异常” 't,它实际上正在加载 b.net,它只是没有显示在顶部。我想让你知道 selenium 中的链接需要前缀“https://”或“http://”才能工作。
  • 对不起,我有一个添加 http 的方法,但为了简单起见,我省略了它。我稍微更改了代码。请你看一下好吗?

标签: python selenium


【解决方案1】:

您只需要在继续之前清除浏览器的 cookie。 (对不起,我错过了在你之前的代码中看到这个)

from selenium import webdriver

driver = webdriver.Chrome()
driver.set_page_load_timeout(7)

def urlOpen(url):
    try:
        driver.get(url)
        print(driver.current_url)
    except:
        driver.delete_all_cookies()
        print("Failed")
        return

urls = ['http://motahari.ir/', 'https://facebook.com', 'https://google.com']

for url in urls:
    urlOpen(url)

输出:

Failed
https://www.facebook.com/
https://www.google.com/?gfe_rd=cr&dcr=0&ei=o73dWfnsO-vs8wfc5pZI

附:在没有明确的异常类型的情况下执行try...except... 不是很明智,这可能会掩盖不同的意外错误。

【讨论】:

  • 有时它会在删除 cookie 时引发另一个超时异常...知道吗?
  • 不抱歉,它从来没有对我提出任何错误,所以我不知道为什么它会发生在你的 D:
  • 当我设置 set_page_load_timeout() 并稍后调用 delete_all_cookies() 我得到一个超时异常。为什么 delete_all_cookies() 会抛出超时异常?
猜你喜欢
  • 2016-05-28
  • 2021-06-28
  • 2021-07-07
  • 2023-02-06
  • 1970-01-01
  • 2021-10-11
  • 1970-01-01
  • 2023-03-27
  • 1970-01-01
相关资源
最近更新 更多