css - 获取 CSS 选择器的前一个兄弟姐妹
问题描述
在此链接的 QHarr 代码中 使用 Excel VBA 从网页中检索所有 Excel 文件链接
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'] 但这返回的对象不是这个选择器之前的链接问题是如何引用前面的标签,它是一个标签.. ?
解决方案
您不能在 vba 中使用 css 选择器进行父元素选择(您正在查看父子关系,而不是兄弟关系)。CSS 向下级联。此外,还有一种叫做特异性的东西在起作用。
您需要编写一个选择器来定位您想要的内容或切换到 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
推荐阅读
- ruby-on-rails-5 - 为 :sorted_by 设置范围以从连接表中选择最大日期
- javascript - 有没有更简单/更干净的方法来写这个?
- jenkins - 在 Jenkins 使用电子邮件插件发送电子邮件失败
- java - 如何将 Facebook Graph api 的结果添加到 Java 中的数组列表中
- javascript - JavaScript 拆分无法按预期工作
- php - 用于选择的 php pdo 的 bind_param
- selenium - testng上的空指针异常
- r - .L, .Q., .C, .4… 的逻辑回归解释
- sql - 如何将单独的年份和月份列转换为单个日期并获取两个日期之间的月/日差异
- java - Java Socket 消耗 100% CPU