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

Python中Selenium定位Load More按钮失败,报No Such Element错误404

解决Selenium无法定位Load More按钮的问题

问题根源分析

  • CLASS_NAME定位错误:Selenium的By.CLASS_NAME不支持空格分隔的多个类名,它会把整个字符串当作单个类名查找,自然找不到元素。
  • CSS_SELECTOR写法错误:原代码中CSS选择器的类名之间有空格,这会被解析为「后代元素选择器」,而非「同时拥有多个类的元素」,正确写法应该用.连接多个类名。
  • 动态类名不稳定:你用的bv-rnr__sc-xxxxxx这类类名是前端框架动态生成的,页面刷新或版本更新后可能变化,依赖这类类名定位不可靠。

正确解决方案

1. 用稳定属性定位按钮

优先选择页面中不会变化的属性,比如按钮的aria-label或按钮文本「Load More」:

  • 用aria-label定位(CSS_SELECTOR):button[aria-label="Load More , This action will load more reviews on screen"]
  • 用按钮文本定位(XPATH)://button[text()="Load More"]

2. 替换time.sleep为显式等待

显式等待会等待元素可点击后再执行操作,比固定时长的time.sleep更可靠,避免因页面加载慢导致的定位失败。

3. 滚动到按钮可见位置

如果按钮在页面底部,需要先滚动到元素位置,确保Selenium能找到并点击。

修改后的代码

import time
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

options = webdriver.ChromeOptions()
options.add_argument("start-maximized")
options.add_experimental_option("detach", True)
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=options)

url = 'https://www.walgreens.com/store/c/allegra-adult-24hr-tablet-180-mg,-allergy-relief/ID=300409806-product'
driver.get(url)

# 显式等待实例,最长等待10秒
wait = WebDriverWait(driver, 10)

while True:
    try:
        # 用aria-label定位Load More按钮,等待按钮可点击
        load_more_btn = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, 'button[aria-label="Load More , This action will load more reviews on screen"]')))
        
        # 滚动到按钮位置
        driver.execute_script("arguments[0].scrollIntoView(true);", load_more_btn)
        time.sleep(0.5)  # 给滚动后的页面渲染留缓冲时间
        
        load_more_btn.click()
        time.sleep(2)  # 等待新评论加载完成
    except Exception as e:
        # 按钮不存在或无法点击时退出循环
        print(f"停止加载:{e}")
        break

driver.quit()

额外检查项

  • 如果按钮仍无法定位,检查评论区是否嵌套在<iframe>标签内:如果是,需要先切换到iframe,示例代码:
    # 找到目标iframe并切换(替换为实际iframe的定位器)
    iframe = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, 'iframe[xxx]')))
    driver.switch_to.frame(iframe)
    
  • 确认页面没有隐私政策弹窗等遮挡元素,这类弹窗会阻止Selenium操作目标按钮。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 08:38:10