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

如何使用Selenium Python依次点击同class属性的所有div按钮?

问题:如何依次点击页面上多个相同类名的按钮

你当前使用以下代码只能点击第一个匹配的按钮:

elm = browser.find_element(By.XPATH, '//div[@class="text-[18px] text-[#556a7a] table-chart"]').click()

但页面中存在多个拥有相同text-[18px] text-[#556a7a] table-chart类属性的按钮,需要实现依次点击每一个按钮。对应的HTML结构示例如下:

<div class="text-[18px] text-[#556a7a] table-chart" data-id="81777" data-name="تیرآهن&nbsp;12&nbsp;ذوب آهن&nbsp;&nbsp;12 متری&nbsp;&nbsp;&nbsp;IPE&nbsp;تهران" data-code="0392">
    <i class="icon-CHART cursor-pointer"></i>
</div>

解决方法

核心思路是获取所有匹配的元素列表,而非单个元素,再遍历列表逐个执行点击操作:

基础实现

使用find_elements(复数形式)替代find_element,获取全部符合条件的按钮,之后循环点击:

# 获取所有匹配的按钮元素集合
buttons = browser.find_elements(By.XPATH, '//div[@class="text-[18px] text-[#556a7a] table-chart"]')

# 遍历每个按钮并点击
for button in buttons:
    button.click()
    # 可选:若点击后页面有加载/弹窗,可添加等待避免报错
    # time.sleep(1)

稳定优化版(推荐)

如果点击后页面会刷新、元素重渲染,或者需要确保按钮可点击,建议使用显式等待提升代码稳定性:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 等待所有按钮加载完成
buttons = WebDriverWait(browser, 10).until(
    EC.presence_of_all_elements_located((By.XPATH, '//div[@class="text-[18px] text-[#556a7a] table-chart"]'))
)

for button in buttons:
    # 等待当前按钮可点击后再执行点击
    WebDriverWait(browser, 10).until(EC.element_to_be_clickable(button)).click()

注意事项

  • 若点击按钮后页面发生跳转,跳转后原元素列表会失效,需要在跳转返回后重新获取元素
  • 避免过度依赖time.sleep,显式等待能更好地适配不同加载速度的场景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 12:43:29