AHK网页按钮按下

时间:2018-03-27 15:15:07

标签: javascript html autohotkey

我已经尝试了一段时间来了解如何让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.

2 个答案:

答案 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或遍历此类型的所有对象并查找页面上的哪个编号并选择之外,我没有其他答案这样。祝好运!