Python Selenium 超时异常捕获

问题描述 投票:0回答:2

在我的线程中,我使用一个设置为“1”或“0”的简单变量来指示它是否准备好再次运行。试图调试一个有时没有被重置的问题,我想我可能有它。

我不希望连接超时到某个无限加载时间(我相信 Selenium 的默认设置是没有超时的)所以我使用了:

Driver.set_page_load_timeout(30)

稍后在该线程中我会检查

If condition:
 isrunning = 0

我原本以为 set_page_load_timeout 会在 30 秒后停止加载,但如果我理解正确,它实际上会抛出异常,所以我需要做类似的事情:

try:
  Driver.set_page_load_timeout(30)
except:
  isrunning = 0
  Driver.Close()

-Do whatever else in function -
If condition:
  isrunning = 0
  Driver.Close()

因此,如果它运行超过 30 秒,它将关闭并设置为 0,否则它将继续运行并被检查并稍后设置为 0。

我很欣赏这是一小段代码,但完整的东西很冗长,我认为这是重要的部分。

如果有人可以确认我在这里有正确的想法,我将不胜感激。我全力以赴进行测试,但这是一个每 8 小时左右出现一次的问题,很难区分,但我认为这可能适合。

python selenium web-scraping
2个回答
70
投票

除了

Driver.Close()
之外,您的大部分代码都可以正常工作。应该是
Driver.close()
TimeoutException
会在页面未在特定时间内加载时抛出。请参阅下面的代码:

from selenium import webdriver
from selenium.common.exceptions import TimeoutException

Driver = webdriver.Firefox()
try:
    Driver.set_page_load_timeout(1)
    Driver.get("http://www.engadget.com")
except TimeoutException as ex:
    isrunning = 0
    print("Exception has been thrown. " + str(ex))
    Driver.close()

0
投票

这应该有效

from selenium import webdriver
from selenium.common.exceptions import TimeoutException

try:
    Driver.set_page_load_timeout(1)
    Driver.get("http://www.engadget.com")
except TimeoutException
    pass
isrunning = 0
Driver.close()
© www.soinside.com 2019 - 2024. All rights reserved.