我正在做《100天代码:2022年Python Pro完整训练营》中的第48天。它基于这个点击游戏:http://orteil.dashnet.org/experiments/cookie/我这里的问题是循环只点击了一次tier_2,然后我得到了错误:
追踪(最近一次通话(:文件";C:/Users/Mariusz/Desktop/100天代码/中间/第48天-硒/main.py";,第44行,intier_2.click((文件";C: \Users\Mariusz\AppData\Local\Programs\Python38-32\lib\site-packages\selenium\webdriver\remote\webelement.py",第80行,点击自我_execute(Command.CLICK_ELEMENT(文件";C: \Users\Mariusz\AppData\Local\Programs\Python38-32\lib\site-packages\selenium\webdriver\remote\webelement.py",第633行,在_execute中回归自我_parent.execute(命令,params(文件";C: \Users\Mariusz\AppData\Local\Programs\Python38-32\lib\site-packages\selenium\webdriver\remote\webdriver.py",第321行,执行中self.error_handler.check_response(响应(文件";C: \Users\Mariusz\AppData\Local\Programs\Python38-32\lib\site-packages\selenium\webdriver\remote\errorhandler.py",第242行,在check_response中引发exception_class(消息、屏幕、堆栈(selenium.com.mon.exceptions.StaleElementReferenceException:消息:陈旧元素引用:元素未附加到页面文档(会话信息:chrome=98.0.4758.102(
代码如下。我做错了什么?我已经坐了整整两个小时,一直在谷歌上搜索,尝试在不同的时间点休息和继续,但结果是一样的。将感谢的任何帮助
import selenium.webdriver.common.keys
import time
path = r"C:UsersMariuszDesktopchromedriverchromedriver.exe"
driver = webdriver.Chrome(executable_path=path)
driver.get("http://orteil.dashnet.org/experiments/cookie/")
cookie = driver.find_element_by_id("cookie")
tier_8 = driver.find_element_by_id("buyTime machine")
tier_7 = driver.find_element_by_id("buyPortal")
tier_6 = driver.find_element_by_id("buyAlchemy lab")
tier_5 = driver.find_element_by_id("buyShipment")
tier_4 = driver.find_element_by_id("buyMine")
tier_3 = driver.find_element_by_id("buyFactory")
tier_2 = driver.find_element_by_id("buyGrandma")
tier_1 = driver.find_element_by_id("buyCursor")
check = time.time() + 5
timeout = time.time() + 300
while time.time()<timeout:
cookie.click()
money_web = driver.find_element_by_id("money")
money = int(money_web.text)
if time.time() > check:
if money >= 123456789:
tier_8.click()
elif money >= 1000000:
tier_7.click()
elif money >= 50000:
tier_6.click()
elif money >= 7000:
tier_5.click()
elif money >= 2000:
tier_4.click()
elif money >= 500:
tier_3.click()
elif money >= 123:
tier_2.click()
elif money >= 17:
tier_1.click()
check = time.time() + 5
StaleElementReferenceException
表示元素不再是DOM的一部分,或者它已移动到另一个span或div或任何其他元素。
将Try/Catch
块添加到您的代码中。当您发现错误时,请重新查找该元素。
money_web = driver.find_element_by_id("money")
try {
doStufOnElement(money_web)
}
catch (exception) {
money_web = driver.find_element_by_id("money");
doStufOnElement(money_web)
}
我找到了解决方案。问题是这一点和所有类似:
tier_2 = driver.find_element_by_id("buyGrandma")
在循环之外因为它是find元素,而不是只调用过一次的元素。我把它和所有类似的东西都放进了这样的循环中:
elif money >= grandma_price:
tier_2 = driver.find_element_by_id("buyGrandma")
tier_2.click()
现在它没有停止,继续并多次点击同一个元素。