Selenium中ActionChains的perform()仅首次生效后续无响应是什么原因?
问题原因
这是Selenium版本差异导致的行为不同,核心和ActionChains的工作逻辑有关:
- 你调用
actions.click(cookie)时,只是把点击动作追加到当前ActionChains实例的动作队列中,不会立刻执行;只有调用actions.perform()才会按顺序执行队列内的所有动作。 - 你当前使用的是较新的Selenium版本:
perform()执行完成后会自动清空动作队列。你仅在循环外添加了1次点击动作,第一次perform()执行完队列就为空,后续999次循环的perform()都是执行空队列,因此只会触发1次点击。 - 教程使用的是旧版本Selenium:早期Selenium的
perform()不会清空动作队列,每次调用perform()都会重复执行队列中已有的所有动作,因此只需要在循环外添加1次点击,循环调用1000次perform()就会触发1000次点击。
兼容所有版本的标准写法
你现在取消注释后、循环内每次添加点击动作再执行的写法是官方推荐的标准写法,适配所有Selenium版本。如果是简单的连续点击场景,也可以不用ActionChains,直接调用元素的点击方法更简洁:
for i in range(1000): cookie.click() count=int(cookie_count.text.split(" ")[0]) print(i,count)
另外注意你的ChromeDriver路径字符串最好加原始字符串标记r避免转义问题:service = Service(r"C:\Program Files (x86)\chromedriver.exe")
内容的提问来源于stack exchange,提问作者mgergo
相关产品推荐
相关产品推荐

