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

Selenium爬虫仅加载页面骨架无法填充数据,求解决方案

Selenium点击搜索后数据已获取但页面不渲染(跨设备失败)

问题描述

开发Python/Selenium脚本爬取某网站公开数据,点击“Search”按钮后仅显示页面骨架,实际数据无法渲染到页面上。Chrome控制台网络标签显示数据已成功获取,但页面始终无内容,同时抛出如下栈追踪错误:

Stacktrace:
GetHandleVerifier [0x00007FF7D8D67D12+55474]
(No symbol) [0x00007FF7D8CD77C2]
(No symbol) [0x00007FF7D8B8E0EB]
(No symbol) [0x00007FF7D8BCEBAC]
(No symbol) [0x00007FF7D8BCED2C]
(No symbol) [0x00007FF7D8C09F77]
(No symbol) [0x00007FF7D8BEF19F]
(No symbol) [0x00007FF7D8C07EF2]
(No symbol) [0x00007FF7D8BEEF33]
(No symbol) [0x00007FF7D8BC3D41]
(No symbol) [0x00007FF7D8BC4F84]
GetHandleVerifier [0x00007FF7D90CB762+3609346]
GetHandleVerifier [0x00007FF7D9121A80+3962400]
GetHandleVerifier [0x00007FF7D9119F0F+3930799]
GetHandleVerifier [0x00007FF7D8E03CA6+694342]
(No symbol) [0x00007FF7D8CE2218]
(No symbol) [0x00007FF7D8CDE484]
(No symbol) [0x00007FF7D8CDE5B2]
(No symbol) [0x00007FF7D8CCEE13]
BaseThreadInitThunk [0x00007FFB49117614+20]
RtlUserThreadStart [0x00007FFB4A3026B1+33]

已尝试以下方案但均无效:

  • 脚本休眠10/20/30/60/120秒
  • 使用WebDriverWait等待元素出现/可见
  • 为Chrome Driver添加请求头

脚本在部分设备可正常运行,部分设备失败。

可行解决方案

1. 模拟真实浏览器环境,规避自动化检测

Selenium默认特征易被网站识别,导致渲染逻辑异常。可通过以下配置优化:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

options = Options()
# 禁用自动化提示
options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option('useAutomationExtension', False)
# 设置真实用户代理(复制自己浏览器的UA)
options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36")
# 启用JavaScript
options.add_argument("--enable-javascript")
# 禁用沙箱模式(部分设备环境需要)
options.add_argument("--no-sandbox")
# 禁用GPU加速(避免渲染冲突)
options.add_argument("--disable-gpu")

driver = webdriver.Chrome(options=options)

2. 强制触发页面重渲染逻辑

数据已获取说明接口正常,问题出在前端渲染。点击后可执行JavaScript强制触发渲染:

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

# 等待并点击搜索按钮
search_btn = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.ID, "search-button")))
search_btn.click()

# 等待页面加载完成后强制触发渲染
WebDriverWait(driver, 20).until(lambda d: d.execute_script("return document.readyState === 'complete'"))
# 滚动到结果区域+触发窗口 resize 事件,强制前端重新渲染
driver.execute_script("document.querySelector('.result-list').scrollIntoView(true);")
driver.execute_script("window.dispatchEvent(new Event('resize'));")

3. 确保Chrome Driver与浏览器版本完全兼容

跨设备失败的核心原因之一是版本不匹配:

  • 查看Chrome版本:打开chrome://settings/help
  • 下载对应版本的Chrome Driver
  • 替换脚本中的驱动路径

4. 禁用缓存避免旧资源干扰

部分设备的缓存可能导致渲染异常,启动浏览器时清除缓存:

# 启用无痕模式自动隔离缓存
options.add_argument("--incognito")
# 或者直接禁用缓存
options.add_argument("--disable-cache")
options.add_argument("--disk-cache-size=0")

5. 检查设备系统资源

页面渲染需要足够CPU和内存,性能不足的设备可能出现渲染超时。关闭设备上占用资源的后台程序,或在脚本中添加简单的资源等待逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 23:57:21