自动热键单击JavaScript超链接
我正在为我的公司开发一个AHK脚本,以便在Internet Explorer界面上自动化一些繁琐的手动处理。到目前为止,我已经能够创建IE的实例,检测它是否存在/是否处于活动状态,并且我能够“getElementById”来填充文本字段、设置焦点、检索值并单击按钮 但最后一步,我想不出来:这个界面上有几个链接,它们不是简单的URL超链接,而是指向另一个页面的链接。其中一个上的“检查元素”显示以下HTML代码:自动热键单击JavaScript超链接,javascript,internet-explorer,hyperlink,autohotkey,Javascript,Internet Explorer,Hyperlink,Autohotkey,我正在为我的公司开发一个AHK脚本,以便在Internet Explorer界面上自动化一些繁琐的手动处理。到目前为止,我已经能够创建IE的实例,检测它是否存在/是否处于活动状态,并且我能够“getElementById”来填充文本字段、设置焦点、检索值并单击按钮 但最后一步,我想不出来:这个界面上有几个链接,它们不是简单的URL超链接,而是指向另一个页面的链接。其中一个上的“检查元素”显示以下HTML代码: <span class="relatedLink" id="a_statusCh
<span class="relatedLink" id="a_statusChangeLink" style="color: blue;" onclick="javascript:openWindowL('StatusChange.aspx?Co=ABC&Cov=001&Ident=AAAAA&Digest=0obCAhixDLtLZRc10og9fNmgf0F&PhzKUudf2spZF14')">Change Status</span>
更改状态
其中有几个链接并排出现,我已经能够使用“relatedLink”类“getElementsByClass”,并匹配其中的一个。innerText=“Change Status”。该类中链接数组的索引为9。我的问题?.Click()属性不起作用。正如您从HTML代码片段中看到的,它触发一个JS函数,打开另一个窗口。我试图“导航”到onclick链接,但“摘要”参数是一个每次都会更改的键。仅供参考,这些链接仅在单击按钮后才会显示在页面上;他们以前不在那里
我试过这个:
但它仍然归结为只发送一个点击,而这并没有任何作用:/。我也尝试过多次点击,但都没有用
非常感谢您提供的任何建议:)
我的相关代码:
IELoad(myWB)
{
If !myWB
Return False
Loop
Sleep, 50
Until (myWb.Busy)
Loop
Sleep, 100
Until (!myWB.Busy)
Loop
Sleep, 500
Until (myWB.Document.Readystate = "Complete")
}
^t::
myWB := ComObjCreate("InternetExplorer.Application")
myWB.Visible := True
myWB.Navigate("http://blabla.domain.local/blah.aspx")
IELoad(myWB)
MsgBox, 64, Loaded, Loaded!
If WinActive("ahk_class IEFrame") > 0
{
SetTitleMatchMode, 2
WinGetActiveTitle, myTitle
if InStr(myTitle, "Blah") > 0
{
;MAIN CODE HERE
myWB.document.getElementById("a_TransactionButton").Click()
IELoad(myWB)
Sleep, 500
;Now the links appear - We want id=a_statusChangeLink
While (myVal <> "Change Status")
myVal:= myWB.document.getElementsByClassName("relatedLink")[A_Index].innerText, index := A_Index
MsgBox, 64, Test, Count is: %myVal% and index is: %index%
myWB.document.getElementsByClassName("relatedLink")[index].Click()
;This is an alternative way of getting that element
links := myWB.document.getElementsByClassName("relatedLink")
Loop, % links.length
n := A_Index - 1
Until, links[n].innerText = "Change Status"
links.item(n).click()
ExitApp
}else
{
MsgBox, 64, Window not found, I did not detect an active Blah window...
ExitApp
}
}
MsgBox, 64, IE Not Found, I did not detect an active IE window...
ExitApp
return
Esc::ExitApp
IELoad(myWB)
{
如果!myWB
返回错误
环
睡觉,50
直到(myWb.Busy)
环
睡吧,100
直到(!myWB.Busy)
环
睡吧,500
直到(myWB.Document.Readystate=“完成”)
}
^t::
myWB:=ComObjCreate(“InternetExplorer.Application”)
myWB.Visible:=True
myWB.Navigate(“http://blabla.domain.local/blah.aspx")
IELoad(myWB)
MsgBox,64,加载,加载!
如果WinActive(“ahk_类IEFrame”)>0
{
SetTitleMatchMode,2
我的头衔
如果仪表(我的标题,“废话”)>0
{
;这里是主代码
myWB.document.getElementById(“a_TransactionButton”)。单击()
IELoad(myWB)
睡吧,500
;现在链接出现-我们希望id=a_statusChangeLink
While(myVal“更改状态”)
myVal:=myWB.document.getElementsByClassName(“relatedLink”)[A_索引]。innerText,索引:=A_索引
MsgBox,64,测试,计数为:%myVal%,索引为:%index%
myWB.document.GetElementsByCassName(“relatedLink”)[index]。单击()
;这是获取该元素的另一种方法
links:=myWB.document.getElementsByClassName(“relatedLink”)
循环,%links.length
n:=A_指数-1
直到,链接[n]。innerText=“更改状态”
links.item(n).单击()
出口
}否则
{
MsgBox,64,未找到窗口,我未检测到活动的Blah窗口。。。
出口
}
}
MsgBox,64,IE未找到,我未检测到活动的IE窗口。。。
出口
返回
Esc::ExitApp
TL;博士请编辑您的问题,只添加您正面临的确切问题以及期望的结果。另外,如果是代码问题/错误,请包含对我们调试有用的代码OK done-尝试具体说明我到目前为止的尝试。并添加了代码。非常感谢。