【问题标题】:AHK web element button pressAHK web 元素按钮按下
【发布时间】:2018-09-06 02:01:02
【问题描述】:

我一直在尝试了解如何让 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

遗憾的是,这仍然没有任何作用,但我觉得它正在接近。

编辑2:

IEGET(name="") 位似乎正在工作,它将循环浏览所有打开的选项卡,看起来像。但是一旦它点击'return,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.

【问题讨论】:

  • 只是一个链接,不是答案:autohotkey.com/board/topic/…希望这会有所帮助!
  • “我从来没有在网上找到对 AHK 有很大帮助的指南”?哇,这很容易搜索并获得上述链接。 . . (提示,这是此搜索中的第四个:ahk getelementbyid)在几个或多或少有它的 SO 链接之后。 . .
  • 这是朝着正确方向迈出的一步,干杯老兄
  • 是的!你很亲密。 . .您需要将 IE 选项卡的名称传递给 IEGet。再次查看编辑,并标记已回答,因为至少我们已经走到了这一步。公平地说,在 ElementID 函数中选择元素时,您可能会有一个新问题。但同样,请参见下文。
  • 你说得对,我确实需要帮助来选择它!至少我有点明白现在发生了什么。大头针

标签: javascript html autohotkey


【解决方案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

第,

【讨论】:

  • 啊,好吧,现在当我尝试这个 ComObjCreate 时,它​​为 Internet Explorer 创建了一个新窗口。那不是我所追求的。窗口已经打开了。我不能在家里复制这个,但它似乎发生在工作中......我不知道那里发生了什么。
  • 这可能与在 IE 中运行的 documentum 有关吗?抱歉,我的深度不够,不知道要寻找什么
  • 看看那个链接。 . .还描述了如何枚举打开的 IE 选项卡(使用 Shell.Application 对象),从而您可以访问打开的 IE 选项卡,然后 wb ahk 对象可以引用打开的 IE 选项卡。稍后我会将它作为编辑放入。
  • 我已经编辑了有进展的帖子,但它仍然没有真正做任何事情......感觉我错过了一些简单的东西
【解决方案2】:

getElementbyID 在这种情况下不起作用,因为您的对象中没有名为“ID”的元素。您将不得不通过另一个选择器“抓住”它——很可能是类或类型。可悲的是,我与您在其中包含 javascript 的对象在同一条船上,所以除了尝试 getElementsbyClassName 或遍历所有此类对象并查找它在页面上的数字并选择之外,我没有答案就这样。祝你好运!

【讨论】:

  • 哈哈评论!!我最终放弃了,好像如果 Java 出现在卡片上,那么它就无法完成 :( 那个循环业务听起来像是有腿的头脑......一个人怎么可能去做呢?
  • 我会从 ahk 板上的这个线程 link 开始,看看它是否有帮助。希望它将引导您朝着正确的方向前进。如果你有任何成功,请告诉我!
  • 哦,顺便说一句,爱你的名字。这是最好的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-01-12
  • 1970-01-01
  • 1970-01-01
  • 2018-01-25
  • 2020-05-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多