0

I am doing day 48 from 100 Days of Code: The Complete Python Pro Bootcamp for 2022. It is based on this clicking game: http://orteil.dashnet.org/experiments/cookie/ Problem I have here is the loop clicks tier_2 just once and then I get error:

Traceback (most recent call last): File "C:/Users/Mariusz/Desktop/100-Days-of-Code/Intermediate/Day 48 - Selenium/main.py", line 44, in tier_2.click() File "C:\Users\Mariusz\AppData\Local\Programs\Python\Python38-32\lib\site-packages\selenium\webdriver\remote\webelement.py", line 80, in click self._execute(Command.CLICK_ELEMENT) File "C:\Users\Mariusz\AppData\Local\Programs\Python\Python38-32\lib\site-packages\selenium\webdriver\remote\webelement.py", line 633, in _execute return self._parent.execute(command, params) File "C:\Users\Mariusz\AppData\Local\Programs\Python\Python38-32\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 321, in execute self.error_handler.check_response(response) File "C:\Users\Mariusz\AppData\Local\Programs\Python\Python38-32\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=98.0.4758.102)

Code is below. What am I doing wrong? I've been sitting at it for good 2 hours, been googling, tried break and continue at different points but result is same. Will appreciate any help

import selenium.webdriver.common.keys
import time

path = r"C:\Users\Mariusz\Desktop\chromedriver\chromedriver.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


2 Answers 2

1

StaleElementReferenceException means that the element is no longer part of the DOM, or that it was moved to another span or div or any other element.

Add Try/Catch block the your code. When you catch the error - find the element again.

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)
}
Sign up to request clarification or add additional context in comments.

Comments

0

I found solution. Problem was that this bit and all similar:

tier_2 = driver.find_element_by_id("buyGrandma")

was outside of loop and because it is find element, not elements it was called only once. I took it and all similar into loop like that:

elif money >= grandma_price:
tier_2 = driver.find_element_by_id("buyGrandma")
tier_2.click()

and now it does not stop and carries on and clicks the same element many times.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.