AutoHotKey等待Internet Explorer完成加载网页

时间:2015-08-18 12:59:55

标签: internet-explorer autohotkey

我正在尝试将状态请求自动化到第三方供应商网站上工作。目前我让我的脚本在每个操作后等待40秒等待页面加载。 (在最坏的情况下,加载时间范围从1秒到几分钟)。

有没有办法让我的脚本在继续之前等待IE完成加载?

我尝试了代码IELoad(wb) from here,但它并不总是有效。 (有时它只会坐在那里,我必须按F5)。昨晚我让它跑了,它停止了大约25个案件。

观察:页面将被加载,但IELoad(wb)功能仍在等待。

; You need to send the IE handle to the function unless you define it as global.
IELoad(wb) {   
    If !wb    ;If wb is not a valid pointer then quit
        Return False
    Loop    ;Otherwise sleep for .1 seconds untill the page starts loading
        Sleep,100
    Until (wb.busy)
    Loop    ;Once it starts loading wait until completes
        Sleep,100
    Until (!wb.busy)
    Loop    ;optional check to wait for the page to completely load
        Sleep,500
    Until (wb.Document.Readystate = "Complete")
    Return True
}

wb := ComObjCreate("InternetExplorer.Application")
wb.Visible := True
wb.Navigate("www.someVendor.com")
IELoad(wb)

; This is the part I have the most problems with
wb.document.getElementById("someLink").click()

; The page might be loaded, but it will sit there and wait forever
IELoad(wb)

; Do some clicking and searching...

2 个答案:

答案 0 :(得分:2)

右键单击脚本的托盘图标,然后选择选项"打开"你可以看到IEload函数被卡住的那一行,这可以告诉你什么可能阻碍你的脚本。

IEload函数有一些问题,因为它可以挂起,如果浏览器比函数内的睡眠和其他一些事情更快地跳过...

我通常用来让IE加载的行看起来像这样

While wb.readyState != 4 || wb.document.readyState != "complete" || wb.busy
    Sleep, 10

还有其他方法可以检查加载状态,例如使用ComObjConnect()并连接到DocumentComplete事件。

还有其他更简单的方法,比如检查html元素是否存在,但通常只有在处理页面脚本更改的不完整页面,框架或元素时才需要...

答案 1 :(得分:1)

我的一个脚本曾经有过这个问题。我发现这是因为他们的服务器不允许回答ping请求,所以也许IELoad在里面的某个地方使用它们。它会在第一次正常工作,但不会在第一次刷新后工作。我必须关闭网页才能重新打开它,而不是只使用IE.refresh()。

相关问题