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

如何在Selenium中多次执行ActionChains?循环点击仅生效一次

解决Selenium循环点击仅生效一次的问题

你的问题出在ActionChains的使用方式上:你只构建了一次点击动作的动作链,之后循环调用perform()时,执行的都是同一个已经完成的动作链,所以只会触发一次点击。

两种可行的修复方案:

  • 方案一:直接使用元素的click()方法(最简单直接)
    不需要借助ActionChains,直接对找到的bigCookie元素调用click(),循环里每次调用都会触发一次新的点击。
  • 方案二:在循环内重新构建动作链
    如果一定要用ActionChains,需要把构建动作链的代码放到循环内部,每次循环都重新创建点击动作并执行。

修改后的代码(方案一,推荐)

from selenium import webdriver
import os
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time

os.environ['PATH'] = r"C:\Users\Ruibin\Desktop\Python\chromedriver_win32"

driver = webdriver.Chrome()
driver.get('https://orteil.dashnet.org/cookieclicker/')

try:
    # 等待语言选择按钮并点击英文
    WebDriverWait(driver, 5).until(
        EC.presence_of_element_located((By.ID, 'langSelect-EN'))
    )
    driver.find_element(By.ID, 'langSelect-EN').click()

    # 等待大饼干元素加载完成且可点击
    cookies = WebDriverWait(driver, 10).until(
        EC.element_to_be_clickable((By.ID, 'bigCookie'))
    )
    
    # 循环点击10次
    for i in range(10):
        cookies.click()
        # 可选:添加短暂延迟,模拟人类点击间隔,避免页面异常
        time.sleep(0.1)
finally:
    # 可按需添加关闭浏览器的代码:driver.quit()
    pass

补充说明:

  • 用WebDriverWait替代implicitly_wait等待元素可点击,比隐式等待更可靠,能确保元素真正可以交互后再执行操作。
  • 加入time.sleep(0.1)是为了模拟人类点击的间隔,避免页面因连续快速点击出现异常。

内容的提问来源于stack exchange,提问作者Ruibin Wu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 08:24:13