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

VBA Selenium无法提取script标签内页面源码数据的解决方案求助

VBA Selenium无法提取script标签内页面源码数据的解决方案求助

我来帮你搞定这个问题!你遇到的情况大概率是因为直接调用PageSource可能没等到动态内容完全注入DOM,或者没找对正确的方式提取script标签里的内容。下面是一步步的解决方案:

1. 先确保页面完全加载

很多时候页面的script数据是动态注入的,直接在get之后就拿PageSource可能会错过这段内容。你可以添加等待逻辑,让页面有足够时间加载完成:

Dim d As WebDriver
Set d = New ChromeDriver
d.Start "Chrome"
d.get "https://www.bloomingdales.com/shop/product/french-connection-ennis-satin-bell-sleeve-mini-dress?ID=5250376&CategoryID=21683"

' 等待页面加载完成,这里用固定等待5秒,也可以用更智能的元素等待
d.Wait 5000

2. 直接定位目标script标签提取内容

与其依赖PageSource,不如直接定位包含window.__INITIAL_STATE__的script元素,这样能精准拿到你需要的内容:

Dim scriptElement As WebElement
' 通过XPath定位包含目标文本的script标签
Set scriptElement = d.FindElementByXPath("//script[contains(text(), 'window.__INITIAL_STATE__')]")

' 提取script标签内的文本内容
Dim scriptContent As String
scriptContent = scriptElement.Text

3. 解析JSON获取selectedSize值

拿到的script内容是JSON格式(前面多了window.__INITIAL_STATE__=前缀),我们需要处理后用JSON解析工具来提取目标值:
首先你需要在VBA中导入VBA-JSON模块(可以在VBA编辑器里通过导入文件添加),然后执行以下代码:

' 去掉前缀,得到纯净的JSON字符串
Dim jsonString As String
jsonString = Replace(scriptContent, "window.__INITIAL_STATE__=", "")

' 解析JSON
Dim json As Object
Set json = JsonConverter.ParseJson(jsonString)

' 提取selectedSize值
Dim selectedSize As Integer
selectedSize = json("traits")("sizes")("selectedSize")

' 输出测试
MsgBox "Selected Size: " & selectedSize

额外注意点

  • 如果遇到找不到script元素的情况,可以调整等待时间,或者改用等待某个页面元素加载完成的方式(比如等待商品名称元素出现),确保页面完全渲染。
  • 有些网站的script内容可能被压缩,这时需要确保你的替换和解析逻辑能处理压缩后的字符串。

备注:内容来源于stack exchange,提问作者Tahir Mehnood

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.15 15:44:29