gpt4 book ai didi

python - 无法在 Selenium 中定位元素时设置默认异常处理程序?

转载 作者:行者123 更新时间:2023-11-28 16:49:32 25 4
gpt4 key购买 nike

我的 selenium 脚本经常会运行,然后突然崩溃并报错:

<class 'selenium.common.exceptions.NoSuchElementException'>
Message: u'Unable to locate element: {"method":"id","selector":"the_element_id"}'
<traceback object at 0x1017a9638>

如果我以交互模式运行 (python -i myseltest.py),如果我只是做类似的事情:

driver.switch_to_window(driver.window_handles[0])

然后再次运行具体的find_element_by_id(),就会成功。

有没有办法在发生异常时自动尝试调用 driver.switch_to_window()

最佳答案

<UPDATE>
首先,考虑使用 implicit wait ,因为此问题主要发生在元素的存在由页面上的 javascript 触发时,并且您可能会在 DOMReady 事件和 js 函数或 ajax 查询执行之间有几秒钟的延迟。
</UPDATE>

这个?

from selenium.webdriver import Firefox  
from selenium.webdriver.support.ui import WebDriverWait

from selenium.common.exceptions import TimeoutException
from selenium.common.exceptions import NoSuchElementException

class MyFirefox(Firefox):

RETRIES = 3
TIMEOUT_SECONDS = 10

def find_element_by_id(self, id):
tries = 0
element = None

while tries < self.RETRIES:
try:
element = WebDriverWait(self, self.TIMEOUT_SECONDS).until(
lambda browser: super(MyFirefox, browser).find_element_by_id(id)
)
except TimeoutException:
tries = tries + 1
self.switch_to_window(self.window_handles[0])
continue
else:
return element

raise NoSuchElementException("Element with id=%s was not found." % id)

关于python - 无法在 Selenium 中定位元素时设置默认异常处理程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9221583/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com