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

Selenium无法点击下一页按钮,当前使用的CSS选择器是否正确?

问题定位

你使用的CSS选择器语法正确,当前站点的下一页按钮确实带有data-testid="next-page-button"属性,选择器本身没有问题。点击失败主要有3个核心原因:

  • 等待机制不符合要求:隐式等待仅能校验元素是否存在于DOM树中,无法保证元素处于可交互、可点击的状态,按钮刚渲染完成时可能还未绑定点击事件,或被顶部悬浮元素遮挡。
  • Headless模式被反爬拦截:该站点有基础反爬策略,默认的无头Chrome标识会被识别,导致页面未完整渲染出下一页按钮。
  • 元素不在可视区域:下一页按钮位于页面底部,未滚动到可视范围内时,Selenium的默认点击操作会被拦截。

修复后的代码

from bs4 import BeautifulSoup
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
import pandas as pd
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.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains

options = webdriver.ChromeOptions()
# 功能测试阶段可先注释无头模式,确认逻辑走通后再开启
# options.add_argument('--headless=new')
options.add_argument("--enable-javascript")
options.add_argument('--no-sandbox')
options.add_argument("window-size=1200x600")
# 新增反爬参数,隐藏自动化浏览器特征
options.add_argument('--disable-blink-features=AutomationControlled')
options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option('useAutomationExtension', False)

driver = webdriver.Chrome(ChromeDriverManager().install(), options=options)
# 注入JS移除webdriver标识,规避反爬检测
driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
    "source": "Object.defineProperty(navigator, 'webdriver', {get: () => undefined})"
})

driver.get('https://www.stakingrewards.com/cryptoassets')
# 用显式等待替代隐式等待,适配元素可点击的校验要求
wait = WebDriverWait(driver, 15)

try:
    # 等待按钮加载至可点击状态
    button = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "button[data-testid='next-page-button']")))
    # 滚动到按钮可视区域
    driver.execute_script("arguments[0].scrollIntoView({block: 'center'});", button)
    # 用JS点击规避元素遮挡、交互限制问题
    driver.execute_script("arguments[0].click();", button)
    print("下一页点击成功")
except Exception as e:
    print(f"点击失败,错误原因:{str(e)}")
finally:
    driver.quit()

补充说明

  • 正式开启无头模式时,建议使用--headless=new参数,为Chrome新版无头模式,兼容性和反爬表现更好
  • 点击操作执行后,可以通过校验页面列表数据、URL参数变化确认翻页是否生效

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 03:39:03