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

如何用Selenium自动点击「显示更多匹配项」按钮?现有代码不生效

核心问题排查

你的代码运行异常的核心原因及待优化点如下:

  • 定位器类型混用错误:使用By.CLASS_NAME时传入了CSS选择器语法,By.CLASS_NAME仅支持传入单个类名,语法不匹配会直接导致元素定位失败。
  • 单次点击逻辑无法适配多按钮场景:现有代码仅执行1次点击,无法覆盖滚动后出现的不同文本、不同位置的多个加载按钮。
  • 未处理元素遮挡:你注释提到的上层div遮挡会导致原生click触发不可交互报错,需要用JS点击绕过遮挡。
  • 缺少滚动触发逻辑:后续加载按钮需要滚动到页面底部才会渲染,现有代码不会自动触发懒加载。

修正后可运行代码

你的驱动配置代码无需改动,仅需替换原有点击逻辑即可:

# 提前导入依赖(如果未导入请补充)
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time

# 原有驱动配置、driver.get(url)、隐式等待逻辑保持不变
wait = WebDriverWait(driver, 12)
max_click_times = 3 # 最多点击3次加载按钮,可按需调整
click_count = 0

while click_count < max_click_times:
    try:
        # 滚动到页面底部触发懒加载,渲染隐藏的加载按钮
        driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
        time.sleep(2) # 可根据网络情况调整预留加载时长
        
        # 用CSS选择器匹配所有符合类属性的加载按钮,自动覆盖两种文本的按钮
        load_buttons = wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, "a[class^='event__more event__more--static']")))
        
        # 遍历可点击按钮,用JS点击绕过上层元素遮挡
        for btn in load_buttons:
            if btn.is_displayed() and btn.is_enabled():
                driver.execute_script("arguments[0].click();", btn)
                click_count +=1
                time.sleep(3) # 点击后预留内容加载时间
                break # 每次点击后重新滚动检测,避免遗漏新加载的按钮
        else:
            # 无可用加载按钮时退出循环
            break
    except Exception as ex:
        print('加载异常:', ex)
        break

补充说明

  • 只要两类加载按钮的类属性一致,代码会自动匹配,不需要额外针对文本做判断。
  • 若后续页面类名规则变动,仅需调整CSS选择器内的类匹配规则即可。
  • 所有睡眠时长可根据你的网络、页面加载速度自行调整,避免加载未完成导致的定位失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 16:45:03