如何使用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="تیرآهن 12 ذوب آهن 12 متری IPE تهران" 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
相关产品推荐
相关产品推荐

