Цепочка действий в цикле работает только один раз (Selenium / Python)

#python #selenium #loops #automation

#python #селен #циклы #автоматизация

Вопрос:

Я пытаюсь внедрить бота-кликера cookie. Cookie clicker это просто глупая простая игра, в которой вы можете нажать на cookie, чтобы заработать больше cookie. Вы можете взглянуть на этот шедевр здесь. Бот должен просто открыть страницу и щелкнуть по файлу cookie 4000 раз, но он щелкает только один раз.

 import time

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait    
from selenium.webdriver.common.action_chains import ActionChains

PATH = "C:Program Files (x86)chromedriver.exe"
driver = webdriver.Chrome(PATH)
driver.get("https://orteil.dashnet.org/cookieclicker/")

driver.implicitly_wait(10)

cookie = driver.find_element(By.ID, "bigCookie")

actions = ActionChains(driver)
actions.click(cookie)

for i in range(4000):
    actions.perform()
 

Я вижу эти сообщения в консоли. Что не так со мной в моем коде?
ошибки

Ответ №1:

То, что вы пытаетесь сделать здесь, — это загрузить пистолет один раз, а затем нажать на спусковой крючок несколько раз в цикле… Чтобы делать то, что вы хотите, вам следует немного изменить свой код следующим образом:

 actions = ActionChains(driver)

for i in range(4000):
    actions.click(cookie)
    actions.perform()
 

Кстати, я предполагаю, что этот код все равно не будет работать, поскольку после первого щелчка по cookie элементу, даже если он появится снова, это будет НОВЫЙ, ДРУГОЙ элемент, даже если он может быть расположен с тем же локатором.
Поэтому попытка щелкнуть его снова приведет StaleElementReferenceException к.
Чтобы выполнить эту работу, вам нужно будет каждый раз находить cookie элемент заново, как показано ниже:

 actions = ActionChains(driver)

for i in range(4000):
    cookie = wait.until(EC.visibility_of_element_located((By.ID, "bigCookie")))
    actions.click(cookie)
    actions.perform()