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

如何用Selenium点击单个按钮及批量点击5个以上按钮?

使用Selenium点击指定按钮及批量点击相同按钮

一、点击单个指定按钮

如果只需点击单个目标按钮,优先用显式等待确保元素可交互,避免硬等待导致的不稳定:

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

driver = webdriver.Chrome()
driver.get("https://samara.docke.ru/facade/")

# 等待按钮可点击,超时10秒
target_btn = WebDriverWait(driver, 10).until(
    EC.element_to_be_clickable((By.CLASS_NAME, "products-tile__btn"))
)
target_btn.click()

二、批量点击页面上所有相同按钮(5个及以上)

针对页面存在多个相同类名按钮的场景,分两种情况处理:

方案1:一次性点击所有已加载按钮(按钮加载完成后不再新增)

适合页面初始化就加载完所有按钮的场景:

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

driver = webdriver.Chrome()
driver.get("https://samara.docke.ru/facade/")

# 等待所有按钮加载完成
all_btns = WebDriverWait(driver, 10).until(
    EC.presence_of_all_elements_located((By.CLASS_NAME, "products-tile__btn"))
)

# 遍历点击每个按钮,先移动到元素确保在视口内
for btn in all_btns:
    ActionChains(driver).move_to_element(btn).perform()
    btn.click()
    # 如果点击后页面有加载动作,可用显式等待替代硬等待
    # WebDriverWait(driver, 5).until(EC.staleness_of(btn))

方案2:循环点击直到没有更多按钮(点击后会加载新按钮)

针对你代码的逻辑修正,实现点击按钮后自动加载新按钮,直到页面无该类按钮:

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

driver = webdriver.Chrome()
driver.get("https://samara.docke.ru/facade/")

while True:
    try:
        # 等待3秒,找不到可点击的按钮就退出循环
        btn = WebDriverWait(driver, 3).until(
            EC.element_to_be_clickable((By.CLASS_NAME, "products-tile__btn"))
        )
        ActionChains(driver).move_to_element(btn).perform()
        btn.click()
        # 等待页面加载新内容(根据实际情况调整时长,优先用显式等待)
        time.sleep(2)
    except:
        # 无按钮可点击时,保存页面源码并退出
        with open("link_page.html", "w", encoding="utf-8") as file:
            file.write(driver.page_source)
        break

你现有代码的问题说明

  1. 仅定位了第一个按钮元素,没有处理批量点击的逻辑
  2. 循环内只执行了移动到元素的操作,没有调用click()触发点击
  3. 判断条件逻辑倒置:原代码会在按钮全部消失后才退出,但实际应该是找到按钮就点击,直到无按钮可点击

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 02:40:08