在此链接的QHarr代码中 Retrieving all Excel file links from a webpage with Excel VBA
Public Sub Links()
Dim sResponse As String, html As HTMLDocument, list As Object, i As Long
With CreateObject("MSXML2.XMLHTTP")
.Open "GET", "https://www.jpx.co.jp/markets/public/short-selling/index.html", False
.setRequestHeader "If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT"
.send
sResponse = StrConv(.responseBody, vbUnicode)
End With
Set html = New HTMLDocument
With html
.body.innerHTML = sResponse
Set list = html.querySelectorAll("[href$='.xls']")
End With
For i = 0 To list.Length - 1
Debug.Print Replace$(list.item(i), "about:", "https://www.jpx.co.jp")
Next
End Sub
我正在尝试以其他方式使用CSS选择器。 img [title ='Excel'] 但这返回的对象不是此选择器之前的链接 问题是如何引用前面的标记,即标记..?
答案 0 :(得分:2)
您无法使用vba中的css选择器进行父元素选择(您正在查看父子关系,而不是同级)。 CSS级联下降。此外,还有一个名为specificity的东西正在起作用。
您需要编写一个针对您想要的对象的选择器,或切换到selenium并使用xpath(尽管不确定selenium基本xpath实现中支持多少功能)。我在下面显示了两个合适的CSS选择器方法和一个XPath选项。
您可以使用属性和$运算符相同的原理,并以src为目标
[src$='xls.png']
所以
Set list = html.querySelectorAll("[src$='xls.png']")
Debug.Print list.item(0).src
您还可以使用:
img[title=Excel]
使用xpath和selenium basic查找父母
Option Explicit
Public Sub GetParents()
Dim d As WebDriver, elements As Object, element As Object
Set d = New ChromeDriver
Const URL = "https://www.jpx.co.jp/markets/public/short-selling/index.html"
With d
.get URL
Set elements = .FindElementsByXPath("//img[@title='Excel']/parent::a")
For Each element In elements
Debug.Print element.Attribute("href")
Next
Stop
.Quit
End With
End Sub