在继续使用AutoHotkey之前,如何等待Google Chrome加载网页?

Que*_*ark 13 automation autohotkey google-chrome

我正在开发一个在Google Chrome中执行重复性工作的AutoHotkey脚本.每次我从脚本中单击一个链接时,我都必须告诉我的脚本在页面加载时休眠.

我想知道在AHK中是否有一种方法让我告诉脚本等待浏览器完成加载页面而不是睡眠一段时间.这可能吗?

Kar*_*k S 7

这是我用来检查页面是否已加载的代码.它检查由x,y定义的特定像素位置处的颜色.如果像素颜色匹配函数退出循环回主脚本.

功能定义:

waitForPageLoad(x, y, color)
{
  Loop
  {
    PixelGetColor, Loaded, %x%, %y%
    if Loaded = %color%
      break
  }
}
Run Code Online (Sandbox Code Playgroud)

功能调用:

waitForPageLoad(399, 265, "0xE4C2A2")
Run Code Online (Sandbox Code Playgroud)


小智 7

虽然Karthik的答案比睡眠命令更好,并且它对许多站点都能很好地运行,但我发现有一些问题可能会蔓延,特别是如果你经常使用它.

我自己需要一个可靠的解决方案,我相信我终于找到了.转到Chrome网上应用店并添加名为的Google Chrome扩展程序Control Freak.这很容易让您设置可以在单个页面,整个域或任何站点/页面上触发的代码块.

控制怪胎Chrome扩展

加载完成后,单击现在用于扩展的齿轮按钮.在需要进行页面加载检测的相应上下文/空间中单击弹出窗口的顶部.即All

现在您可以单击Libs选项卡.向下滚动到jQuery.您可以从您喜欢的列表中选择任何版本,但我选择了最新版本.请注意,CDN的URL添加在底部.现在,在单击Save底部的按钮后,您将始终在所选的任何上下文中使用jQuery.

切换回JavaScript选项卡并添加此代码,并根据您的喜好进行修改:

jQuery(function() {
  prompt("Diagnostic: Page Status", "loaded");
});
Run Code Online (Sandbox Code Playgroud)

单击"保存"后,此代码将在jQuery Ready事件上执行.现在您有一种可靠的方法来检测AHK可以使用的页面加载!

有了这个,你可以让AutoHotkey等待一个标题开始的窗口,通过说"页面在......",毫无疑问是我们的提示,预先填写我们的单词"loaded".您可以告诉AHK发送一个Control + c来复制它,然后检查它的值,或者只是假设你看到它,那么你可能有你想要的.以下AHK代码可以等待提示弹出窗口(这可以通过警报btw轻松完成).

clipboard=
WinWait, The page at
WinWaitActive
Send ^c
ClipWait
WinClose
; The rest here is entirely optional tooltip code, but can be useful.
tooltip, The diagnostic data provided was: %clipboard%,0,0
sleep, 1000
tooltip
Run Code Online (Sandbox Code Playgroud)

所以让我们优化它并将它放入一个可以反复调用的函数中:

功能定义:

waitForPageLoad()
{
  WinWait, The page at
  WinWaitActive
  WinClose
}
Run Code Online (Sandbox Code Playgroud)

功能调用:

waitForPageLoad()
Run Code Online (Sandbox Code Playgroud)

其他想法..

现在我注意到这个代码甚至在页面未真正被更改或重新加载时触发,例如当页面URL可能发生变化时,但是他们专门将其编码为不离开页面,通常你会看到新的内容那里.这对我的目的来说是完美的,但是这可以通过设置某种变量并检查它是否已经设置(在Control Freak中添加的JavaScript代码中)来过滤掉.


Rob*_*ink 5

您可以像这样使用鼠标光标状态:

Sleep, 200
while (A_Cursor = "AppStarting" or A_Cursor = "Wait") ; Wait for browser to be ready (page loaded)
    continue
Sleep, 200
while (A_Cursor = "AppStarting" or A_Cursor = "Wait") ; Wait for browser to be ready (page loaded)
    continue
Run Code Online (Sandbox Code Playgroud)

我这样做了两次,只是为了确保鼠标光标的短暂状态变化没有给出错误的数据.