![](/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.