![](/img/trans.png)
[英]Selenium clicking a link where the href is javascript:void[0];
[英]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"> </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"> </th><th class="hidden" scope="col"> </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.