【问题标题】:Get preceding sibling for CSS selector获取 CSS 选择器的前一个兄弟姐妹
【发布时间】:2019-04-26 19:20:55
【问题描述】:

在此链接的 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'] 但这会返回对象而不是此选择器之前的链接 问题是如何引用前面的标签,它是一个标签..?

【问题讨论】:

  • 指定具有特定子代的 a 标签:a img[title=‘Excel’]?
  • 非常感谢。但这会返回代码中的对象列表
  • 另一个 xpath 将是 "//a[img[@title='Excel']]"
  • 这也很好。非常感谢

标签: css excel vba web-scraping xmlhttprequest


【解决方案1】:

您不能在 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

【讨论】:

  • 非常感谢。我想知道如何处理前面的兄弟姐妹
  • 您不能在 vba 中使用 css 选择器执行前面的兄弟。 CSS 向下级联。您需要编写一个选择器来定位您想要的内容或切换到 selenium 并使用 xpath(尽管不确定 vba xpath 实现中支持多少功能)
  • 那么在这种情况下如何使用 XPath .. 在 excel vBA 中?
  • 我很困惑,因为我认为你想要一个后代。你想要 a 后面的 img 吗?
  • 非常感谢您的帮助
猜你喜欢
  • 1970-01-01
  • 2022-05-30
  • 2011-01-09
  • 2011-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-05-30
相关资源
最近更新 更多