我的AHK脚本的预期运行时间介于5分钟到25分钟之间,具体取决于事件。它主要是通过屏幕抓取浏览器,搜索模式并采取相应的操作(通过单击屏幕上的某些区域)。完成所有操作后终止浏览器会话。我安排它从Windows任务调度程序每小时运行一次。
我的问题是,当出现网络问题或我的工作站CPU处于高级时刻时,网页加载的时间不足(通常大约15秒,并且不可能使其更长因为内容可能在30秒内发生变化)或者在过程中间可能会挂起一些东西。
如果发生这样的事情,我希望AHK脚本退出并在退出之前,我希望它终止所有浏览器会话(在这种情况下为chrome)
到目前为止,我无法提出一个单一的脚本"解。
我目前的状态是启动一个脚本,每30分钟监控一次文件的内容,如果内容没有从上次更改,请打开一个新的Google Chrome会话并发送 Shift - Ctrl - Q 用于关闭所有chrome实例的键序列。同时,我的主脚本在完成后使用与之前的值不同的数字更新相同的文件,并且它是唯一的。这种方法的不足之处:我不知道如何在不杀死这个看门狗脚本的情况下杀死其他AHK脚本(挂一个)。
我的最终愿望是将这个功能构建到主脚本中,这个脚本容易被挂起。
我的主要脚本
send #r
send chrome.exe http://myURL{enter}
mousemove 200,200
send ^a
send ^c
;
; using a series of IfInString commands
; determine the condition
; then use mousemove, x, y and mouseclick, l
; commands, do my deed
filedelete, c:\mydir\myfile
fileappend, newnumber, c:\mydir\myfile
exitapp
我的看门狗脚本
loop ; forever
{
; old content is stored in variable PREV
fileread, newval, c:\mydir\myfile
if (newval = PREV)
{
send #r
send chrome.exe
sleep 10000 ; wait for chrome window to pop up
send ^+Q
; I need a way to stop my hung AHK script here but don't know how
}
else
{
PREV = %newval%
sleep 1800000 ; sleep 30 minutes
}
} ; end of loop
f10::exitapp ; when I need to stop watchdog
当然这些不是实际的脚本。只是为了给你一个主意。否则,有很多等待页面加载等等。但它的要点就在那里。
提前感谢您的帮助
答案 0 :(得分:0)
SetTimer
,我只使用Sleep
的循环,
在这种情况下,我认为这不会有助于改进脚本。UrlDownloadToFile
可以更轻松地完成您描述的某些任务
或WinHttpRequest
(参见论坛上的示例)下载网页,然后解析html。-
;to launch Chrome and wait for it to open (with an optional delay afterwards)
;if the window is not seen within 60 seconds, ErrorLevel is set to 1 and action can be taken
Run, "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" "https://www.google.com/"
WinWaitActive, ahk_class Chrome_WidgetWin_1, , 60
if ErrorLevel
{
MsgBox error ;put code here
}
else
{
Sleep 10000
;put code here
}
;to launch Internet Explorer and wait for it to open (with an optional delay afterwards)
Run, "C:\Program Files\Internet Explorer\iexplore.exe" "https://www.google.com/"
WinWaitActive, ahk_class IEFrame
Sleep 10000
;to terminate a script
DetectHiddenWindows, On
vPathScript = %A_ScriptDir%\my script.ahk
WinGet, hWnd, ID, %vPathScript% - AutoHotkey v ahk_class AutoHotkey
IfWinExist, ahk_id %hWnd%
{
WinGet, vPID, PID, ahk_id %hWnd%
Process, Close, %vPID%
}
答案 1 :(得分:0)
使用以下方法处理看门狗: -2台带有共享文件夹的本地PC -3个ahk脚本
PC-1 ahk处理脚本(永远循环) Windows启动时自动启动
LOOP
put a WD file on PC-2
run some process
wait some time
go to LOOP
PC-1 ahk WD-1脚本 Windows启动时自动启动(永远循环)
if initial startup set Counter and put WD file in local shared folder
LOOP
wait some time
if local WD file doesn't exist decrement Counter
if Counter = Zero Send Email
if local WD file exists reset Counter and delete local WD file
go to LOOP
PC-2 ahk WD-2脚本 Windows启动时自动启动(永远循环)
if initial startup set Counter and put WD file in local shared folder
LOOP
wait some time
if local WD file doesn't exist decrement Counter
if Counter = Zero Send Email
if local WD file exists reset Counter and delete local WD File
put WD file on PC-1
go to loop
基本故障方案:
Process script Fails ... PC-1 and PC-2 WD scripts will send emails
PC-1 Fails ... PC-2 WD script will send email
PC-2 Fails ... PC-1 WD script will send email