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

使用Python+Selenium爬取React页面指定类元素失败求助

解决Selenium获取页面元素为空的问题

问题原因分析

  • 类名选择语法错误:By.CLASS_NAME仅支持单个类名输入,不能使用div.rv-squad-header.full这类CSS选择器语法,这是导致返回空列表的直接原因。
  • 固定等待不可靠:time.sleep(5)是固定时长等待,若页面加载较慢,5秒可能不足以让目标元素渲染完成。
  • 无头模式检测:部分网站会识别Chrome无头模式,限制页面内容加载,导致元素无法被捕获。

修正后的代码

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

options = webdriver.ChromeOptions()
# 使用新版无头模式,行为更接近正常浏览器
options.add_argument("--headless=new")
# 设置窗口大小,避免布局异常导致元素不可见
options.add_argument("--window-size=1920,1080")
# 规避自动化检测,防止网站限制内容加载
options.add_argument("--disable-blink-features=AutomationControlled")

driver = webdriver.Chrome(options=options)
driver.get('https://anmalan.gavlepistol.se/competition/653/roster')

try:
    # 显式等待目标元素加载完成,最长等待10秒
    WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.CLASS_NAME, 'rv-squad'))
    )

    # 获取各类目标元素
    rv_squads = driver.find_elements(By.CLASS_NAME, 'rv-squad')
    # 多类名元素使用CSS_SELECTOR定位
    rv_squad_headers = driver.find_elements(By.CSS_SELECTOR, 'div.rv-squad-header.full')
    rv_participants = driver.find_elements(By.CLASS_NAME, 'rv-participant')

    # 输出元素数量验证结果
    print(f"rv-squad 元素数量: {len(rv_squads)}")
    print(f"rv-squad-header full 元素数量: {len(rv_squad_headers)}")
    print(f"rv-participant 元素数量: {len(rv_participants)}")

    # 示例:打印第一个rv-squad的文本内容
    if rv_squads:
        print("\n第一个小队内容:")
        print(rv_squads[0].text)

finally:
    # 确保浏览器正常关闭
    driver.quit()

关键修正说明

  • 多类名元素定位:对于包含多个类名的元素(如rv-squad-header full),使用By.CSS_SELECTOR并通过div.rv-squad-header.full语法定位,而非By.CLASS_NAME。
  • 显式等待替代固定等待:WebDriverWait会等待目标元素出现后再执行后续代码,比固定时长等待更稳定可靠。
  • 无头模式优化:添加参数规避网站的自动化检测,确保页面正常加载目标内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 19:27:39