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

使用Selenium点击Trustpilot下一页按钮失败:仅滚动未触发点击

解决Selenium无法点击Trustpilot下一页按钮的问题

以下是针对你遇到的问题的具体解决方案,从定位可靠性、元素交互时机、异常处理等多个维度优化代码:


1. 用显式等待替代直接定位,确保元素可交互

直接调用find_element时,可能元素还未加载完成或处于不可点击状态。使用WebDriverWait等待元素满足可点击条件,是更可靠的方式:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import NoSuchElementException

class Scraper:
    # ... 其他方法保持不变 ...

    def next_page(self):
        # 等待下一页按钮可点击,超时10秒
        next_btn = WebDriverWait(driver, 10).until(
            EC.element_to_be_clickable((By.NAME, "pagination-button-next"))
        )
        next_btn.click()

2. 强制滚动到元素可见区域后点击

有时页面滚动仅让元素进入视野边缘,导致点击失效。可以通过JS脚本将元素滚动到视口中心:

def next_page(self):
    next_btn = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.NAME, "pagination-button-next"))
    )
    # 滚动到元素位置并预留顶部间距
    driver.execute_script("arguments[0].scrollIntoView({block: 'center'});", next_btn)
    # 再次确认元素可点击
    WebDriverWait(driver, 5).until(EC.element_to_be_clickable((By.NAME, "pagination-button-next")))
    next_btn.click()

3. 更换更稳定的定位方式

如果name属性定位不稳定,可改用页面中更唯一的属性(比如data-testid或文本内容):

# 使用CSS选择器定位(适配Trustpilot实际元素属性)
def next_page(self):
    next_btn = WebDriverWait(driver, 10).until(
        EC.element_to_be_clickable((By.CSS_SELECTOR, 'button[data-testid="pagination-button-next"]'))
    )
    driver.execute_script("arguments[0].scrollIntoView({block: 'center'});", next_btn)
    next_btn.click()

或者用文本内容定位:

def next_page(self):
    next_btn = WebDriverWait(driver, 10).until(
        EC.element_to_be_clickable((By.XPATH, '//button[contains(text(), "Next page")]'))
    )
    driver.execute_script("arguments[0].scrollIntoView({block: 'center'});", next_btn)
    next_btn.click()

4. 用JavaScript强制点击(解决元素遮挡问题)

如果按钮被页面底部导航栏等元素遮挡,Selenium原生click()会失效,可直接通过JS触发点击:

def next_page(self):
    next_btn = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.NAME, "pagination-button-next"))
    )
    driver.execute_script("arguments[0].scrollIntoView({block: 'center'});", next_btn)
    # 绕过元素遮挡,直接执行点击
    driver.execute_script("arguments[0].click();", next_btn)

5. 修复Cookie弹窗的异常处理

原代码捕获AttributeError错误类型错误,找不到元素时应该捕获NoSuchElementException:

def ignore_cookie(self):
    try:
        ignore_cookies = driver.find_element(by=By.XPATH, value='//*[@id="onetrust-reject-all-handler"]')
        ignore_cookies.click()
    except NoSuchElementException:
        pass

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 08:15:28