VBA提取网页嵌套Div商品价格:querySelectorAll函数无法正常工作
解决VBA获取Skinport商品价格的问题
问题根源
你的代码里querySelectorAll失效主要有两个原因:
- 动态内容加载:Skinport的商品价格是通过JavaScript动态渲染的,
MSXML2.XMLHTTP只能获取页面的静态HTML源码,拿不到JS加载后的实际价格数据。 - 代码本身的小问题:数组
MyValue()未初始化就直接赋值MyValue(1),会触发下标越界错误;另外querySelectorAll使用Item(1)是取第二个匹配元素,大概率不符合你要获取首条价格的需求。
修正方案(使用IE处理动态渲染内容)
改用IE浏览器加载页面,等待JS渲染完成后再提取价格:
Sub Update_Price() Dim Webpage As String Dim ie As Object Dim priceElement As Object ' 从单元格读取目标页面URL Webpage = Worksheets(2).Cells(2, 5).Value ' 初始化IE对象 Set ie = CreateObject("InternetExplorer.Application") ie.Visible = False ' 设为True可查看页面加载过程 ie.Navigate Webpage ' 等待页面完全加载(含JS渲染) Do While ie.Busy Or ie.ReadyState <> 4 DoEvents Loop ' 定位价格元素(注意类名大小写与页面一致) Set priceElement = ie.Document.querySelector(".ItemPage-value .Tooltip-link") ' 将价格写入指定单元格 If Not priceElement Is Nothing Then Worksheets(2).Cells(2, 12).Value = priceElement.innerText Else Worksheets(2).Cells(2, 12).Value = "未找到价格" End If ' 清理资源 ie.Quit Set ie = Nothing End Sub
额外说明
- 若不想用IE,可通过抓包找到Skinport的商品价格API接口,直接用
MSXML2.XMLHTTP请求接口获取JSON数据并解析价格,这种方式效率更高,但需要自行分析接口地址与参数。 - 确保类名拼写完全匹配页面:原页面中价格所在类为
ItemPage-value(小写v),代码中需保持一致。
内容的提问来源于stack exchange,提问作者n3tw4rri0r
相关产品推荐
相关产品推荐

