无法单击基于JavaScript的链接,该链接也是通过VBA使用web元素的网页上表格的一部分

无法单击基于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

我试图通过点击网页上的某些链接,将业务数据输入搜索框,并将其与现有数据进行比较,从而实现业务流程的自动化。但是,我在单击基于javascript的链接时失败,该链接也使用VBA作为表的一部分。该网站的相关HTML如下:

<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