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

使用requests.get或webdriver.get无法获取完整HTML 无法提取嵌套div属性值

根因分析

  • requests只能获取服务端返回的静态HTML,你要的进度条节点是页面加载后通过JavaScript动态生成的,静态源码中不存在,因此无法直接通过requests爬取。
  • 你的Selenium代码没有添加等待逻辑,调用driver.get后页面还未完成JS渲染、动态节点还未插入DOM就直接读取了page_source,因此也找不到目标节点。

解决方案

方案1:修复Selenium实现(门槛最低)

添加显式等待逻辑,等目标节点加载完成后再提取数据,示例代码如下:

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

def SeleniumScrapePercents():
    pl = []
    driver = webdriver.Chrome("chromedriver.exe")
    driver.get("https://citystrides.com/cities/26013/search_striders?page=1")
    
    try:
        # 最多等待10秒,直到父容器节点加载完成
        WebDriverWait(driver, 10).until(
            EC.presence_of_element_located((By.CSS_SELECTOR, "div.flex.flex-wrap.space-y-4"))
        )
        # 查找所有进度条节点
        percent_nodes = driver.find_elements(By.CSS_SELECTOR, "div.py-1.bg-purple-900.rounded-lg")
        for node in percent_nodes:
            style_text = node.get_attribute("style")
            # 提取数值
            percent_val = float(style_text.removeprefix("width: ").removesuffix("%").strip())
            pl.append(percent_val)
    finally:
        driver.quit()
    
    return pl

如果运行时报超时错误,先手动打开目标页面确认是否需要登录,若需要登录可以先在Selenium启动的浏览器中完成登录,再执行提取逻辑,也可以提前将登录后的Cookie注入到driver中。

方案2:调用后端接口(效率更高)

不需要启动浏览器,直接请求动态数据的后端接口:

  1. 打开浏览器F12开发者工具,切换到「网络」面板,筛选「XHR/ Fetch」类型
  2. 刷新目标页面,逐个查看请求的返回值,找到包含进度数据的接口
  3. 直接用requests请求该接口,解析返回的JSON数据即可,比解析HTML更稳定高效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 15:09:01