You need to enable JavaScript to run this app. Python+Selenium如何定位点击含唯一data-order-group-id属性的REPEAT ORDER按钮
优惠活动
大模型
产品
解决方案
定价
更多

Python+Selenium如何定位点击含唯一data-order-group-id属性的REPEAT ORDER按钮

解决方法

你不需要依赖唯一的data-order-group-id属性定位单个按钮,直接通过所有REPEAT ORDER按钮共有的通用特征批量匹配所有元素即可,以下是可直接使用的代码示例:

方法1:通过按钮专属class定位(最推荐,性能最高)

所有目标按钮都带有repeat-order-button专属类名,直接用该类名匹配所有按钮即可:

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("你的页面URL")

# 等待所有按钮加载完成,最长等待10秒
wait = WebDriverWait(driver, 10)
repeat_buttons = wait.until(EC.presence_of_all_elements_located((By.CLASS_NAME, "repeat-order-button")))

# 循环点击所有按钮
for btn in repeat_buttons:
    btn.click()
    # 如果点击后页面会跳转/刷新,需要在这里添加等待逻辑,回到列表页后重新获取按钮列表再继续循环,避免元素失效报错

方法2:通过属性存在匹配

如果担心class会变动,可以匹配所有带data-order-group-id属性的按钮:

# 替换上述代码中的元素定位行即可
repeat_buttons = wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, "button[data-order-group-id]")))

方法3:通过按钮文本匹配

如果前面的特征都不可用,可以用文本匹配定位:

# 替换上述代码中的元素定位行即可
repeat_buttons = wait.until(EC.presence_of_all_elements_located((By.XPATH, "//button[normalize-space(text())='REPEAT ORDER']")))

特殊场景注意

如果点击单个按钮后会触发页面刷新/跳转,不要直接遍历第一次获取的按钮列表,会触发StaleElementReferenceException错误,此时可以先提取所有按钮的data-order-group-id存到列表,再循环遍历id逐个定位点击:

# 先存储所有订单的唯一id
order_ids = [btn.get_attribute("data-order-group-id") for btn in repeat_buttons]
# 逐个定位点击
for order_id in order_ids:
    btn = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, f'button[data-order-group-id="{order_id}"]')))
    btn.click()
    # 这里添加回到订单列表页的逻辑和对应等待

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 02:09:02