簡體   English   中英

如何使Excel VBA自動在IE中單擊javascript a href鏈接

[英]How to make Excel VBA automate clicking javascript a href link in IE

我在VBA中有一個宏,該宏使用Excel自動導航到網頁。

我能夠通過其ID選擇元素,然后單擊或插入值以使站點自動化。

但是,在嘗試“單擊”似乎沒有任何ID的鏈接/按鈕時,我陷入了困境。 這是一個JavaScript鏈接:

<div>
<table class="table" id="ctl00_cphMaster_Results" style="width: 100%; border-collapse: collapse;" cellspacing="0">
    <tbody><tr>
        <th style="width: 70px; white-space: nowrap;" scope="col"><a href="javascript:__doPostBack('ctl00$cphMaster$Results','Sort$Indicator')">True?</a></th><th class="hidden" style="width: 100px;" scope="col"><a href="javascript:__doPostBack('ctl00$cphMaster$Results','Sort$Reference')">Reference</a></th><th scope="col"><a href="javascript:__doPostBack('ctl00$cphMaster$Results','Sort$Results')">Result Number</a></th><th class="hidden" scope="col">&nbsp;</th><th scope="col"><a href="javascript:__doPostBack('ctl00$cphMaster$Results','Sort$Type')">Type</a></th><th class="hidden" scope="col"></th><th class="hidden" scope="col">&nbsp;</th><th class="hidden" scope="col">&nbsp;</th>
    </tr><tr>
        <td align="center"><a href="Summary02.aspx?"><img title="Accepted" id="true" style="border: currentColor; border-image: none;" alt="Accepted" src="/Common/Graphics/tick_green.gif"></a><img id="Accepted" style="border: currentColor; border-image: none;" src="/Common/Graphics/tick_spacer.gif"><img id="Accepted" style="border: currentColor; border-image: none;" src="/Common/Graphics/tick_spacer.gif"></td><td class="hidden">MyValue</td><td><a href="javascript:__doPostBack('ctl00$cphMaster$Results','ResultNumber$0')">ResultNumber</a></td>
    </tr>
</tbody></table>

我試圖單擊“ ResultNumber $ 0”或以某種方式觸發它,但到目前為止未成功。 如何使IE自動單擊此javascript鏈接/按鈕? 到目前為止,我的代碼:

Sub ClickJavaLink()
Const URL = "https://myurl"    
Dim ie As Object
Set ie = CreateObject("InternetExplorer.Application")

With ie
    .navigate URL
    ieBusy ie
    .Visible = True

    For Each Item In ie.document.all
        If Item.ID = "QuickSearchField" Then
            Item.Value = 1
        End If
        If Item.ID = "QuickSearch" Then
            Item.Value = "MyValue"
        End If
        If Item.ID = "btnSearch" Then
            Item.Click
            Exit For
        End If
    Next
    ieBusy ie

'code working up to this point - below code is attempt to click the javascript link but does not work   
    For Each Item In ie.document.all
        If Item.ID = "ResultNumber$0" Then
            Item.Click
            Exit For
        End If
    Next
    ieBusy ie
End With

結束子

Sub ieBusy(即,作為對象)在while.Busy或ie.ReadyState <4 DoEvents循環結束時執行

有一種更好,更快的方法。 使用屬性=值 CSS選擇器和包含運算符

ie.document.querySelector("[href*='ResultNumber$0']").click

單線; 沒有循環; 降低代碼復雜度。

您可以通過首先訪問足夠方便的具有唯一ID的表來訪問錨元素。

這是您如何遍歷該表內的所有錨點元素的方法:

Dim anc As HTMLAnchorElement
For Each anc In ie.Document.getElementById("ctl00_cphMaster_Results").getElementsByTagName("a")
    Debug.Print anc.innerText
    'anc.click 'uncomment this to click on all links
Next anc

為了演示起見,以上代碼在立即窗口中打印了這些元素的文本。

要訪問特定元素,可以使用元素的索引。 例如,要訪問表中的第一個元素,您可以這樣操作:

ie.Document.getElementById("ctl00_cphMaster_Results").getElementsByTagName("a")(0).click

要訪問第二個,只需將0替換為1 ,依此類推。

訪問特定元素的另一種方法是使用其href屬性:

Dim anc As HTMLAnchorElement
For Each anc In ie.document.getElementById("ctl00_cphMaster_Results").getElementsByTagName("a")
    If anc.href = "javascript:__doPostBack('ctl00$cphMaster$Results','ResultNumber$0')" Then
        Debug.Print anc.innerText
        'anc.click
    End If
Next anc

您將需要向Microsoft HTML Object Library添加參考(VBE> Tools> References)。

您可以嘗試在頁面上找到href元素,如下所示:

For Each item In Ie.Document.getAttribute("href", 2)

   If item.href ="javascript:__doPostBack('ctl00$cphMaster$Results','ResultNumber$0')" Then

      item.Click

         Exit For

   End If

Next item

讓我知道是否可行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM