css - 获取 CSS 选择器的前一个同级

标签 css excel vba web-scraping xmlhttprequest

在此链接的 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[标题='Excel'] 但这返回的对象不是该选择器之前的链接 问题是如何引用前面的标签,这是一个标签..? enter image description here

最佳答案

您无法使用vba中的css选择器进行父元素选择(您正在查看父子关系,而不是 sibling )。 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来寻找 parent

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

关于css - 获取 CSS 选择器的前一个同级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53459225/

相关文章:

vba - 获取枚举的等效文本

php - 如何将文本框更改为textarea?

html - 如何修改 CSS 复选框标签以包含 'required' 函数

vba - 在 VBA 中复制数据透视表值

java - 如何在 GAE 中仅获取包含超过 80K 行和超过 7 列的 Google 电子表格的前四行(使用 Java)

excel - 如何使用数组公式对 excel 3d 数组中的列、行、列求和

excel - 如何使用 VBA 遍历 Excel 中的可变列长范围

css - 减小 contenteditable 元素中光标的大小

javascript - 在新标签页中打开 DIV?

excel - 根据自动过滤条件循环 IF