python - 如何在 Selenium 中“if else”(selenium.common.exceptions.StaleElementReferenceException)
问题描述
我现在要做的是检查按钮是否被硒禁用。如果按钮被禁用,它将不断刷新浏览器,它不会单击按钮。但是每当我执行程序时,它都会向我显示一些错误。有人对此错误有任何想法吗?提前致谢。
错误:
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Users\heng\AppData\Local\Programs\Python\Python38\lib\tkinter\__init__.py", line 1883, in __call__
return self.func(*args)
File "C:/Users/heng/PycharmProjects/testtest/Flash Sale Bot/bot.py", line 116, in startbot
btnclass = belisekarang.get_attribute("class")
File "C:\Users\heng\PycharmProjects\testtest\venv\lib\site-packages\selenium\webdriver\remote\webelement.py", line 139, in get_attribute
attributeValue = self.parent.execute_script(
File "C:\Users\heng\PycharmProjects\testtest\venv\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 634, in execute_script
return self.execute(command, {
File "C:\Users\heng\PycharmProjects\testtest\venv\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 321, in execute
self.error_handler.check_response(response)
File "C:\Users\heng\PycharmProjects\testtest\venv\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.StaleElementReferenceException: Message: stale element reference: element is not attached to the page document
(Session info: chrome=88.0.4324.190)
我的代码:
def startbot():
getproducturl = producturl.get()
#getvaration = variation.get()
gethour = timehour.get()
gettime = timeminute.get()
driver.get(getproducturl)
#driver.find_element_by_xpath(getvaration).click()
try:
belisekarang = driver.find_element_by_xpath('//*[@id="main"]/div/div[2]/div[2]/div[2]/div[2]/div[3]/div/div[5]/div/div/button[2]')
belisekarang.click()
except NoSuchElementException:
driver.refresh()
except StaleElementReferenceException:
print("fafaf")
btnclass = belisekarang.get_attribute("class")
while True:
if 'disabled' in btnclass:
driver.refresh()
else:
belisekarang.click()
解决方案
belisekarang =WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH,'//*[@id="main"]/div/div[2]/div[2]/div[2]/div[2]/div[3]/div/div[5]/div/div/button[2]')))
btnclass = belisekarang.get_attribute("class")
while True:
if 'disabled' in btnclass:
driver.refresh()
else:
belisekarang =WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH,'//*[@id="main"]/div/div[2]/div[2]/div[2]/div[2]/div[3]/div/div[5]/div/div/button[2]')))
belisekarang.click()
调用 driver.refrresh() 后,您的 dom 结构将被刷新,并且所有元素引用都将丢失。所以你必须再次重新识别所有元素。
所以在你的情况下,只需在再次上课之前添加“belisekarang”
推荐阅读
- bash - 如果分支没有最新的 master,Azure 构建失败
- twig - Symfony 5 和 opache 的 Twig 缓存问题
- python - 请求的输出格式“s16le”不是 discord.py 中合适的输出格式
- java - 如何为每个控制器设置不同的基本 url
- plugins - 右键单击项目
- snowflake-cloud-data-platform - 雪花:通过插入值添加多个值时面临问题
- python - 使用获取的结果选择数据框中的列
- web-config - 每天在 web.config 中自动更改 connString
- scala - Scala - 使用数组的最后一个元素进行计算
- angular - 可通过硬编码数据观察