我正在尝试点击网站上带有标签的链接:
<a href="/dbget-bin/www_bget?dr:D01441:>D01441</a>
但是,我是在搜索唯一项目(我有一个包含9000多个唯一项目的数组)之后执行此操作,并且每个项目的“ D01441”部分都不相同,我事先不知道它是什么将为每个。以下代码处于循环中,遍历每个项目并一次搜索一个项目。搜索之后,我想单击出现的链接(上面的代码),然后在下一个网页上执行更多操作。
Dim IE As Object
Dim ele As Object
Set IE = CreateObject("InternetExplorer.Application")
...
For Each ele In IE.document.getElementsByTagName("a")
If ele.Href = "/dbget-bin/www_bget?dr:D01441" Then
ele.Click
Exit For
End If
Next
上面的代码不起作用,我不确定为什么。但是,一旦它开始工作,我不知道如何修改“ D01441”部分,以便可以单击任何搜索到的项目的链接。这是我想要的链接周围的更多html:
<tbody>
<tr> ... </tr>
<tr>
<td class = "data1">
<a href = "/dbget-bin/www_bget?dr:D01441:>D01441</a>
</td>
<td class = "data1">..</td>
<td class = "data1">..</td>
...
编辑:要尝试处理变化的“ D01441”,我尝试使用InStr,但它也不起作用:
For Each ele In IE.document.getElementsByTagName("a")
If InStr(ele.Href, "/dbget-bin/www_bget?dr:") = 1 Then
MsgBox "There"
ele.Click
Exit For
End If
Next
答案 0 :(得分:3)
CSS选择器:
尝试使用通过querySelector
的{{1}}方法应用的CSS选择器组合,以document
的公共开始部分为目标。
应用选择器组合:
href
了解选择器组合:
这使用CSS选择器组合将元素定位为:
IE.document.querySelector("a[href^='/dbget-bin/www_bget?dr:']").Click
这表示带有a[href^='/dbget-bin/www_bget?dr:']
标签的元素具有属性a
,其值以
href
。 '/dbget-bin/www_bget?dr:'
的意思是开头。
实际查询:
以下是对HTML示例起作用的选择器:
旁注:
如果您有多个带有^
标签的元素,并且以a
开头的href
,则在大多数情况下,它将与第一个匹配。如果是这样的话,看到更多的HTML会有所帮助。我认为该HTML示例存在一些问题,因为从理论上讲,更具选择性的CSS查询可能是/dbget-bin/www_bget?dr:
,以便包括.data1 a[href^='/dbget-bin/www_bget?dr:']
的父元素类,而data1
是一个类选择器。
答案 1 :(得分:2)
@QHarr答案是最优雅,最好的解决方案,但是...
要解决从href获取零件号的问题,可以像这样使用InStr
For Each ele In IE.document.getElementsByTagName("a")
Dim partNumber As String
Dim colonPosition As Long
colonPosition = InStr(1, ele.Href, ":", vbTextCompare)
If colonPosition > 0 Then
partNumber = Right$(ele.Href, Len(ele.Href) - colonPosition)
Debug.Print partNumber
End If
Next ele