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

如何用Selenium点击所有含“add”文本的按钮并完成系列自动化操作?

用Selenium批量点击含"add"文本的按钮并完成后续流程

核心思路

通过XPath文本匹配精准定位所有含"add"的按钮,循环处理每个按钮的点击-提交流程,再依次处理分页和字母分类切换,全程用显式等待避免元素加载问题。

代码实现(Python)

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.common.exceptions import NoSuchElementException, ElementClickInterceptedException

# 初始化Chrome驱动(其他浏览器可替换为Firefox/Edge等)
driver = webdriver.Chrome()
driver.get("你的动漫列表页面URL")
wait = WebDriverWait(driver, 10)

def process_current_page():
    """处理当前页面所有add按钮的点击-提交流程"""
    while True:
        try:
            # 定位所有含"add"文本的按钮(忽略大小写差异)
            add_buttons = wait.until(EC.presence_of_all_elements_located(
                (By.XPATH, "//button[contains(translate(text(), 'ADD', 'add'), 'add')]")
            ))
            if not add_buttons:
                break
            # 点击第一个未处理的add按钮
            add_buttons[0].click()
            
            # 等待提交按钮加载并点击(根据实际按钮文本调整)
            submit_btn = wait.until(EC.element_to_be_clickable(
                (By.XPATH, "//button[contains(text(), '提交')]")
            ))
            submit_btn.click()
            
            # 等待页面状态更新,避免元素过期
            wait.until(EC.staleness_of(add_buttons[0]))
        except (NoSuchElementException, ElementClickInterceptedException):
            # 遇到不可点击或不存在的元素,跳过继续
            continue

def navigate_pagination():
    """切换下一页,返回是否切换成功"""
    try:
        next_page_btn = wait.until(EC.element_to_be_clickable(
            (By.XPATH, "//a[contains(text(), '下一页')]")
        ))
        # 判断按钮是否可用(根据实际页面的禁用标识调整)
        if "disabled" not in next_page_btn.get_attribute("class"):
            next_page_btn.click()
            wait.until(EC.staleness_of(next_page_btn))
            return True
        return False
    except NoSuchElementException:
        return False

def navigate_letter_categories():
    """遍历所有字母分类并处理"""
    # 定位字母导航栏的所有按钮(根据实际页面结构调整)
    letter_buttons = wait.until(EC.presence_of_all_elements_located(
        (By.XPATH, "//div[@class='letter-nav']/a")
    ))
    
    for letter_btn in letter_buttons:
        letter_text = letter_btn.text
        print(f"处理字母分类: {letter_text}")
        letter_btn.click()
        wait.until(EC.title_contains(letter_text))  # 等待分类页面加载完成
        
        # 处理当前分类下的所有分页
        while True:
            process_current_page()
            if not navigate_pagination():
                break

# 启动完整流程
navigate_letter_categories()

# 关闭浏览器
driver.quit()

关键细节说明

  • 精准匹配按钮:用translate(text(), 'ADD', 'add')统一转为小写,避免因"Add"/"ADD"等大小写差异漏匹配。
  • 显式等待:所有元素操作前都用WebDriverWait等待,解决页面加载延迟导致的元素找不到问题。
  • 元素过期处理:每次循环重新获取add按钮列表,避免点击后页面刷新触发StaleElementReferenceException。
  • 异常容错:捕获元素不可点击、不存在的异常,确保流程不会中途中断。

自定义调整点

  • 替换代码中的页面URL、提交按钮文本、分页按钮文本、字母导航栏定位路径为你实际页面的元素信息。
  • 若提交后有弹窗,需添加弹窗关闭逻辑(比如定位关闭按钮并点击)。
  • 若页面加载较慢,可延长WebDriverWait的超时时间(比如从10秒改为15秒)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 00:06:27