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
相关产品推荐
相关产品推荐

