如何在Selenium中"if else"(selenium.common.exceptions.StaleElementReferenceException)



我现在要做的是检查按钮是否被硒禁用。如果该按钮是禁用的,它将保持刷新浏览器,如果它不是,它会点击按钮。但是每当我执行这个程序时,它都会显示一些错误。有人对这个错误有什么想法吗?提前谢谢。

错误:

Exception in Tkinter callback
Traceback (most recent call last):
File "C:UsershengAppDataLocalProgramsPythonPython38libtkinter__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:UsershengPycharmProjectstesttestvenvlibsite-packagesseleniumwebdriverremotewebelement.py", line 139, in get_attribute
attributeValue = self.parent.execute_script(
File "C:UsershengPycharmProjectstesttestvenvlibsite-packagesseleniumwebdriverremotewebdriver.py", line 634, in execute_script
return self.execute(command, {
File "C:UsershengPycharmProjectstesttestvenvlibsite-packagesseleniumwebdriverremotewebdriver.py", line 321, in execute
self.error_handler.check_response(response)
File "C:UsershengPycharmProjectstesttestvenvlibsite-packagesseleniumwebdriverremoteerrorhandler.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. refresh()后,dom结构被刷新,所有元素引用都丢失。所以你必须重新识别所有的元素。

所以在你的例子中,只需在再次获得类之前添加'belisekarang'

相关内容

最新更新