Excel VBA doc.querySelectorAll(“ p”)不会捕获/选择所有p个元素

问题描述 投票:0回答:1

[我正在尝试为Excel修复一个计算器,该计算器将从以下网站提取TNT的最新国际附加费率:https://www.tnt.com/express/en_nz/site/shipping-services/fuel-surcharges-apac.html如您所见,最新的附加费率为15.75%。

我上传的屏幕截图是我要在“ 15.75%”中提取内容的特定p标签。 Webpage screenshot

我有以下VBA代码来测试我是否获得了正确的元素:

Sub GetFuelSurchargeWeb()

Dim xhr As Object
Dim doc As MSHTML.HTMLDocument
Dim table As Object
Dim tableCell As HTMLHtmlElement
Dim valCharge As String, url As String, inrText As String, searchTag1 As String, searchTag2 As String, valFrom As String
Dim i As Integer, tag1Indx As Integer, tag2Indx As Integer, tag3Indx As Integer
Dim searchTag3 As String
Dim ObjP As Object

url = "https://www.tnt.com/express/en_nz/site/shipping-services/fuel-surcharges-apac.html"
searchTag1 = "FROM"
searchTag2 = ":"
searchTag3 = ":"

On Error GoTo ErrHndlr
Application.ScreenUpdating = False

Set xhr = CreateObject("MSXML2.XMLHTTP")

With xhr
    .Open "GET", url, False
    .send
    If .readyState = 4 And .status = 200 Then
        Set doc = New MSHTML.HTMLDocument
        doc.body.innerHTML = .responseText
    Else
        MsgBox "Error" & vbNewLine & "Ready state: " & .readyState & _
        vbNewLine & "HTTP request status: " & .status
    End If
End With

Set ObjP = doc.querySelectorAll("p")
Debug.Print (ObjP.Length)
For Each table In ObjP
    Debug.Print (table.innerHTML)
Next table

[当我打印p标签元素的innerHTML时,似乎抓住了第一段的喜欢,例如“周”,“每加仑美元”,“所有服务”,但是跳过了“ 2019年9月23日-9月29日2019“” 1.833“” 15.75%“,即使它们都包含在p标签中。

我才刚刚开始使用VBA,并且对如何获得此值感到困惑。如果有人可以通过解决方案或替代方法帮助我获得所需的价值,我们将不胜感激。理想情况下,我希望包含当前星期的元素也为“ 2019年9月23日-2019年9月29日”,但现在仅关注附加费率。

欢呼

vba excel-vba
1个回答
0
投票

该内容是从您未捕获的另一个端点动态检索的。您可以在“网络”标签中找到它。它返回json,所以理想情况下,您将使用jsonconverter.bas之类的json解析器来处理响应并提取感兴趣的值。有问题的端点是https://www.tnt.com/express/getDynamicData.apac.json

© www.soinside.com 2019 - 2024. All rights reserved.