无法单击基于JavaScript的链接,该链接也是通过VBA使用web元素的网页上表格的一部分
我试图通过点击网页上的某些链接,将业务数据输入搜索框,并将其与现有数据进行比较,从而实现业务流程的自动化。但是,我在单击基于javascript的链接时失败,该链接也使用VBA作为表的一部分。该网站的相关HTML如下:无法单击基于JavaScript的链接,该链接也是通过VBA使用web元素的网页上表格的一部分,javascript,vba,web-scraping,html-parsing,Javascript,Vba,Web Scraping,Html Parsing,我试图通过点击网页上的某些链接,将业务数据输入搜索框,并将其与现有数据进行比较,从而实现业务流程的自动化。但是,我在单击基于javascript的链接时失败,该链接也使用VBA作为表的一部分。该网站的相关HTML如下: <tr class="odd"> <td> <a onclick="viewCompanyDetails('B214273', '1529481460070');" href="javascript:;">Alinda Infrastructu
<tr class="odd"> <td> <a onclick="viewCompanyDetails('B214273', '1529481460070');" href="javascript:;">Alinda Infrastructure Fund III (Euro) GP SARL</a></td> <td><a onclick="viewCompanyDetails('B214273', '1529481460070');" href="javascript:;">B214273</a></td> </tr>
这就是网页内容的样子
我已隐藏实体的名称以保护客户的身份。我需要单击每个图像第一行的结果
如果你能提供任何帮助,我将不胜感激。同样,我是VBA的初学者,不知道如何在这里继续。如果您需要进一步澄清,请告知我您可以使用
.querySelector
获取您想要的元素,这是第一个使用的元素
.document.querySelector("a[onclick='viewCompanyDetails('B214273', '1529481460070');']")
然后,您可能需要执行以下任一操作:
.document.querySelector("a[onclick='viewCompanyDetails('B214273', '1529481460070');']").Click
或
CSS选择器: 选择器从HTML中返回2个项目,但当将选择器应用于HTML时,
。querySelector
仅返回其中的第一个项目。第一个是必需的“SARL”
有关方法的更多信息: fireEvent方法:在对象上激发指定的事件 语法:object.firevent(bstrEventName,pvarEventObject,
(已取消) 它有一个布尔返回值,如果为TRUE,则表示事件已成功触发
方法:
文档
方法querySelector()
返回第一个元素
在与指定选择器或组匹配的文档中
选择器。如果未找到匹配项,则返回null
语法:element=document.querySelector(选择器);我面临的问题是,对于IE.document.GetElementsByCassName(“tr”)中的每个entitylink,如果entitylink.getElementsByTagName=“a”和entitylink.textcontent=Sheets(“结果”).Range(“N1”).Value和entitylink.href=“javascript:;”中的代码位于底部然后是entitylink。如果下一个entitylink尝试直接执行脚本而不是“cliking”,请单击“退出”结束。感谢Volodymyr的回复。我浏览了这个链接,但说实话,我不知道这篇文章指的是什么。您能帮我在这里的代码中应用相同的元素吗?我应该在这里查看的元素到底是什么?这一行如何有效
IE.document.getElementsByTagName(“href”)
?你不认为href
是属性而不是标签
@Renin Mathew吗?谢谢你的回复。不过,我还是很迷茫——上面的目的是什么?基本上是的,但不一定是这样。我需要单击与搜索条件表(“结果”).Range(“N1”)中提供的名称最接近的匹配项。值是实体或搜索条件的名称。目前我还没有计划获得最接近的匹配-正如您可能建议的,最上面的一行很可能是最接近的匹配,我认为只使用最上面的一行应该是公平的。IE版本11.22Document mode=11(默认)
.document.querySelector("a[onclick='viewCompanyDetails('B214273', '1529481460070');']").Click
.document.querySelector("a[onclick='viewCompanyDetails('B214273', '1529481460070');']").fireEvent 'onclick'
Dim c As Object, n As Object
Set c = ie.document.getElementsByTagName("a")
For Each n In c
If InStr(1, n.innerText, "Alinda Infrastructure Fund III (Euro) GP SARL") > 0 Then
n.Click
Exit For
End If
Next n
Dim c As Object, n As Object, counter As Long
Set c = ie.document.getElementsByTagName("a")
With ActiveSheet
For Each n In c
counter = counter + 1
.Cells(counter, 1) = n.innerText
Next n
End With
Option Explicit
Public Sub GetInfo()
Dim ie As Object
Application.ScreenUpdating = False
Set ie = CreateObject("InternetExplorer.Application")
With ie
.Visible = True
.navigate "https://www.lbr.lu/mjrcs"
While .Busy Or .readyState < 4: DoEvents: Wend '<== Loop until loaded
Dim links As Object, link As Object
Set links = .document.getElementsByTagName("a")
For Each link In links
If link.innerText = "View the person's file" Then
link.Click
Exit For
End If
Next link
While .Busy Or .readyState < 4: DoEvents: Wend
.document.getElementById("companyName").innerText = "Alinda"
.document.getElementsByClassName("button")(0).Click
While .Busy Or .readyState < 4: DoEvents: Wend
Dim hTable As HTMLTable
Set hTable = .document.getElementsByClassName("commonTable")(0)
Dim n As Object, tRow As Object, tCell As Object, tr As Object, td As Object, r As Long, c As Long, hBody As Object
r = 1
With ActiveSheet
Set hBody = hTable.getElementsByTagName("tbody")
For Each n In hBody 'HTMLTableSection
Set tRow = n.getElementsByTagName("tr") 'HTMLTableRow
For Each tr In tRow
Set tCell = tr.getElementsByTagName("td")
c = 1
For Each td In tCell 'DispHTMLElementCollection
.Cells(r, c).Value = td.innerText 'HTMLTableCell
c = c + 1
Next td
r = r + 1
Next tr
Next n
End With
.Quit '<== Remember to quit application
End With
Application.ScreenUpdating = True
End Sub