You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Selenium实现Cookie Clicker自动点击代码运行不稳定原因咨询

核心原因分析

  1. 语言切换后的异步资源加载
    点击英文语言选择按钮后,网站会异步加载对应本地化资源(文本、界面元素等),DOM结构会重新更新。driver.implicitly_wait(5)的固定5秒等待,无法覆盖不同网络环境下的资源加载耗时——当加载时间超过5秒时,代码就会因找不到bigCookie元素而失败。

  2. 显式等待的条件或用法错误
    如果之前尝试的显式等待仅使用了presence_of_element_located,这个条件仅检查元素是否存在于DOM中,不保证元素已经可见或可交互。另外,若同时混用隐式等待和显式等待,Selenium的等待逻辑会出现冲突,导致实际等待行为不可预测,反而加剧不稳定。

  3. 元素初始化的延迟
    bigCookie元素虽然会被添加到DOM,但网站可能需要完成后续的脚本绑定、样式渲染等初始化步骤,此时即使元素存在,也无法被正常点击,直接执行点击操作会触发失败。

修复后的稳定代码

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

PATH = "/usr/local/bin/chromedriver"
driver = webdriver.Chrome(service=Service(PATH))
driver.get("https://orteil.dashnet.org/cookieclicker/")

# 等待语言选择按钮可点击后再操作
language = WebDriverWait(driver, 10).until(
    EC.element_to_be_clickable((By.ID, "langSelect-EN"))
)
language.click()

# 等待bigCookie元素可见且可交互
cookie = WebDriverWait(driver, 10).until(
    EC.element_to_be_clickable((By.ID, "bigCookie"))
)

for _ in range(100):
    ActionChains(driver).click(cookie).perform()

driver.quit()

关键优化点

  • 移除全局隐式等待,避免与显式等待冲突,确保等待逻辑完全可控。
  • 对所有交互元素使用element_to_be_clickable条件,该条件同时验证元素存在、可见且可交互,覆盖了元素初始化的全流程。
  • 将超时时间设置为10秒,适配绝大多数网络环境下的资源加载需求,同时避免不必要的长时间等待。

内容的提问来源于stack exchange,提问作者Justin Jonany

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 15:08:15