我已经尝试了一段时间来了解如何让AHK按下按钮不是通过图像或像素搜索,或通过坐标,而是通过网页元素ID,以便它可以在不同的PC上工作而没有问题,而且不那么容易失败。
我已经确定了按钮的网络代码:
<div class"rightButtonSection">
<button name="PierPropertiesContainer_componentnext_0" title="Next Page" class="button buttonLink" onclick"setKeys(event);__xee72onclick(this);" type="button">Next</button>
</div>
我在这里不仅仅是我的深度,而且我从未在网上找到AHK的指南,这对此有很大帮助。
我认为这将与document.getElementById(“button”)有关,就目前为止我所知道的那样。
如果你知道我接下来可以尝试什么,或者我需要什么额外信息,请告诉我!
干杯
编辑:
在感激地提供链接和建议之后,我把它放在一起:
!q::
IEGet(name="") {
IfEqual, Name,, WinGetTitle, Name, ahk_class IEFrame
Name := (Name="New Tab - Windows Internet Explorer")? "about:Tabs":RegExReplace(Name, " - (Windows|Microsoft)? ?Internet Explorer$")
for wb in ComObjCreate("Shell.Application").Windows()
if wb.LocationName=Name and InStr(wb.FullName, "iexplore.exe")
return wb
}
wb := IEGet()
wb.Visible := true
wb.document.getElementById("button").click()
return
可悲的是,这仍然没有任何作用,但我觉得它已经接近了。
EDIT2:
IEGET(name =“”)位似乎正常工作,它将循环显示所有打开的选项卡,它看起来像。但是一旦它命中'返回',wb'就会挂在那里,所以错误必须是我识别选项卡名称......也许......
001: Return (3.37)
004: if name =
004: WinGetTitle,name,ahk_class IEFrame
005: name := (Name="New Tab - Windows Internet Explorer")? "about:Tabs":RegExReplace(Name, " - (Windows|Microsoft)? ?Internet Explorer$")
006: For wb, in ComObjCreate("Shell.Application").Windows() (0.09)
007: if wb.LocationName=Name && InStr(wb.FullName, "iexplore.exe")
008: Return,wb (4.82)
Press [F5] to refresh.
答案 0 :(得分:1)
看看@Michael_Curry评论。您需要创建一个包含Web浏览器对象(Internet Explorer)的AHK对象。这是一个用于创建一个的简单脚本:
wb := ComObjCreate("InternetExplorer.Application") ;// Create an IE object
wb.Visible := true ;// Make the IE object visible
wb.Navigate("www.AutoHotkey.com") ;// Navigate to a webpage
然后,您的代码如下工作:
wb.document.getElementById("button")
每条评论编辑:
如果您需要找到一个已经打开的IE选项卡用作您的wb对象,请将第一行替换为:
IEGet("The name of the IE tab you want to use")
并将以下IEGet函数(从链接中)添加到您的脚本中:
IEGet(name="") {
IfEqual, Name,, WinGetTitle, Name, ahk_class IEFrame ;// Get active window if no parameter
Name := (Name="New Tab - Windows Internet Explorer")? "about:Tabs":RegExReplace(Name, " - (Windows|Microsoft)? ?Internet Explorer$")
for wb in ComObjCreate("Shell.Application").Windows()
if wb.LocationName=Name and InStr(wb.FullName, "iexplore.exe")
return wb
}
按照OP的合理尝试进行编辑
你到了那里。您需要引号中的IE选项卡名称,并且可能有助于使用选择器(但这是另一个问题)。尝试:
wb := IEGet("IE tab name") ;// here put in the actual IE tab name in quotes
wb.Visible := true
wb.document.getElementById("PierPropertiesContainer_componentnext_0").click() ;// is button the ID? try the name or a different selector
H个,
答案 1 :(得分:1)
getElementbyID在这种情况下将不起作用,因为您的对象中没有名为“ ID”的元素。您将不得不通过另一个选择器“抓住”它-最有可能的类或类型。不幸的是,我和您的其中包含javascript的对象在同一条船上,所以除了尝试getElementsbyClassName或遍历此类型的所有对象并查找页面上的哪个编号并选择之外,我没有其他答案这样。祝好运!