Dim ele As Object, iText As StringSet ele = html.querySelector(".BoxBody > p > span:first-child > a[title='下一页']")出错时继续下一步iText = ele.href出错时转到 0If iText = vbNullString Then '<== 这假设 href 有一个值,否则使用 On Error GoTo 处理错误并打印no href"Debug.Print无href"别的调试.打印href"万一
29/5/21 截至上个月的某个时间点(?),已经可以广泛使用 element.querySelector 以及大多数标准伪类选择器(至少对于 Windows 10、MSHTML.DLL 11.00.19041.985(修改日期为 12/5/21)
I put up a sample VBA code using querySelector as well, but it fails with Invalid argument.
Sub test()
Dim oFSO As Object, paginator As Object
Dim oFS As Object, sText As String
Set oFSO = CreateObject("Scripting.FileSystemObject")
Set oFS = oFSO.OpenTextFile(ThisWorkbook.Path & "\example.html")
Do Until oFS.AtEndOfStream
sText = oFS.ReadAll()
Loop
Dim html As HTMLDocument, html2 As Object
Set html = New HTMLDocument
Set html2 = html
html2.Write sText
Set paginator = html.querySelector(".BoxBody > p:nth-child(2) > span:nth-child(1)").querySelector("a[title='Next page']")
End Sub
What is causing this? The p:nth-child(2) identifier? How should I go to extract that element using VBA?
解决方案
nth-child(2) is not supported in VBA and is indeed causing the error message. You can't use :nth-child() or :nth-of-type(). There is very little implemented in libraries available to you that deal with pseudo-classes. You can use first-child interestingly. You will also find you are limited on which objects you can chain querySelector on.
Dim ele As Object, iText As String
Set ele = html.querySelector(".BoxBody > p > span:first-child > a[title='Next page']")
On Error Resume Next
iText = ele.href
On Error GoTo 0
If iText = vbNullString Then '<== This assumes that the href has a value otherwise use an On Error GoTo which will then handle the error and print "no href"
Debug.Print "No href"
Else
Debug.Print "href"
End If
EDIT: 29/5/21 As of some point in last month (?) it has become possible to use element.querySelector widely as well as the most of the standard pseudo-class selectors (at least for Windows 10, MSHTML.DLL 11.00.19041.985 (Date modified 12/5/21)
这篇关于Excel VBA HTML 嵌套查询选择器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!