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

yrwegjxp  于 2023-05-20  发布在  Go
关注(0)|答案(7)|浏览(324)

我正在做一个AutoHotkey脚本,在谷歌浏览器中重复的工作。每次我从脚本中点击一个链接,我都必须告诉我的脚本在页面加载时休眠。
我想知道在AHK中是否有一种方法可以让我告诉脚本等待浏览器完成加载页面,而不是等待一段时间。这可能吗?

ddhy6vgd

ddhy6vgd1#

虽然Karthik's answer比sleep命令更好,而且它在许多站点上都能很好地工作,但我发现如果经常使用它,会出现一些问题。
我需要一个可靠的解决方案,我相信我终于找到了。进入Chrome网上商店,添加名为Control Freak的Google Chrome扩展程序。这很容易让你设置代码块,可以在单个页面,整个域或任何网站/页面上触发。
Control Freak Chrome Extension
一旦你把它加载好,点击你现在拥有的扩展的齿轮按钮。点击弹出窗口顶部的适当上下文/空间,您需要进行页面加载检测。即All
现在,您可以单击“库”选项卡。向下滚动到jQuery。你可以从列表中选择你喜欢的任何版本,但我选择了最新的。请注意,CDN的URL添加在底部。现在,单击底部的Save按钮后,无论选择什么上下文,jQuery都始终可用。
切换回JavaScript选项卡并添加以下代码,然后根据您的喜好进行修改:

jQuery(function() {
  prompt("Diagnostic: Page Status", "loaded");
});

单击保存后,此代码将在jQuery Ready事件后执行。现在你有一个可靠的方法来检测页面加载,AHK可以使用!
有了这个地方,你可以让AutoHotkey等待一个窗口的标题开始说“页面在”....,这无疑是我们的提示,预先填充了我们的词“加载”。你可以告诉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

因此,让我们优化它,并将其放入一个可以反复调用的函数中:
功能定义:

waitForPageLoad()
{
  WinWait, The page at
  WinWaitActive
  WinClose
}

函数调用:

waitForPageLoad()

其他的想法。
现在我注意到,即使在页面没有真正被更改或重新加载的时候,例如当页面URL可能更改时,也会触发此代码,但他们专门编写了代码,以便不离开页面,通常您会在那里看到新内容。这对我的目的来说是完美的,但是可以通过设置某种变量并检查它是否已经被设置(在您在Control Freak中添加的JavaScript代码中)来过滤掉。

kx5bkwkv

kx5bkwkv2#

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

waitForPageLoad(x, y, color)
{
  Loop
  {
    PixelGetColor, Loaded, %x%, %y%
    if Loaded = %color%
      break
  }
}

函数调用:

waitForPageLoad(399, 265, "0xE4C2A2")
p1iqtdky

p1iqtdky3#

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

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

我这样做了两次,只是为了确保鼠标光标的短暂状态更改不会返回错误的数据。

ztigrdn8

ztigrdn84#

我修改了Karthik S's function以添加一个可选的seconds参数。如果指定,这将设置最大等待时间,以防止函数陷入无限循环。我还将颜色比较更改为RGB,以便与Window Spy兼容。(以前与BGR比较)

参数描述:
*x,y:要等待的像素的X和Y坐标。
*color:指定坐标处等待的RGB十六进制颜色。(例如:0xBBCFE3)
*:超时并将ErrorLevel设置为1之前要等待多少秒。
函数定义:

; Wait for page to load by checking pixel color at specified x,y coordinates
WaitForPageLoadByColor(x, y, color, seconds:=-1)
{
   start := A_TickCount
   while ( (seconds = -1) || (A_TickCount-start <= seconds*1000) )
   {
      PixelGetColor, Loaded, %x%, %y%, RGB
      if Loaded = %color%
         return
   }
   ErrorLevel := 1 ; Page failed to load
}

函数调用:

waitForPageLoad(399, 265, "0xBBCFE3", 10)
vwhgwdsa

vwhgwdsa5#

我已经有一些成功的寻找一个控制是目前的目标网页。当然,这取决于页面的内容。我用WinSpy找到了合适的目标
下面是为我工作的代码:

loaded := false
check_count := 0
MAX_CHECKS := 20

while !loaded {
    Sleep, 100
    ControlGetPos, x, y, ,,Chrome Legacy Window
    if x == ""
        loaded := false
    else
        loaded := true

    check_count++
    if (check_count >= MAX_CHECKS) {
        Exit
    }
}
slsn1g29

slsn1g296#

下面的脚本可用于获取加载页面上(x,y)处的颜色

!q::
    x := 100
    y := 200
    msgbox, start
    mousemove, x, y
    PixelGetColor, pColor, x, y, RGB
    Msgbox, Pixel color %pcolor% at %x% %y%
return

下面的脚本可用于等待页面加载

!z::
    x := 100
    y := 200
    loop
         { 
         sleep, 500
         PixelGetColor, pColor, x, y, RGB
         If (pColor = "0x4285F4")
            {
            msgbox, found color: %pcolor%
            break
            }
         }
    ;The next script comes here
    send, {enter}
    ;...
return

参考:https://www.autohotkey.com/boards/viewtopic.php?t=65554

1rhkuytd

1rhkuytd7#

您可以等待像素出现在页面上:

WinWaitActive, WebSite
Loop
{
    CoordMode, Pixel, Window
    PixelSearch, FoundX, FoundY, 0, 0, 1920, 1080, 0x000000, 0, Fast RGB
}
Until ErrorLevel = 0
Sleep, 1000

0x000000替换为您需要的颜色。
Sleep设置为您所需的时间。
或者您可以通过图像搜索重新加载图标:

WinWaitActive, WebSite
Loop
{
    CoordMode, Pixel, Window
    ImageSearch, FoundX, FoundY, 0, 0, 1920, 1080, reload_icon.png
}
Until ErrorLevel = 0
Sleep, 1000

reload_icon.png替换为屏幕截图图标“path”。

相关问题