如何在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
相关产品推荐
相关产品推荐

