[已解决]请问,如何检测网页加载完成,但又不影响循环执行?
本帖最后由 曼菲士 于 2011-3-20 14:15 编辑例如,我同时打开5个网页,我想检测这5个网页是否加载完成,如果没完成则去执行其它操作,等到5个全加载完成后再读取它们的网页源码获取相关内容,现在用_IELoadWait有个问题,在检测一个网页是否完成时,如果它没加载完成,无法执行其它子程序,只有它检测到完成了才能返回到我们自己的代码执行下一步代码,我想,如果 _IELoadWait能实现检测一次,完成则返回1,未完成返回0该多好,检查了一下IE.AU3里的代码,太复杂,水平有限,看不太懂,目前能想到的是用多进程来解决,但还未尝试,请大家帮忙看还有没有其它更好的办法。 估计这个很难,跟网速有很大的关系 想要的_IELoadWait只是判断网页是否加载完成,返回参数给调用者,假设完成返回1,未完成返回0,在执行一次的过程中不用等待,不管完成与否给个结果就行了,我可以用定时循环来判断几时得到的是完成即可。 回复 3# 曼菲士
函数正如其名,LoadWait的功能就是加载中等待。
要想实现你的目的,请参考WebBrowser事件。 只为获取网页源的话不如用_INetGetSource函数 只为获取网页源的话不如用_INetGetSource函数
3mile 发表于 2011-3-19 15:07 http://www.autoitx.com/images/common/back.gif
那个网页有检测,_Inet不能获取,得到的只是网页的非法浏览提示信息。 加载完成的网页标题栏有变化吗?还有是否可以通过查看页面某一标志性tag来判断页面已符合要求。
#include <IE.au3>
Global $Complete, $oIE, $iComplete, $Url = ["www.google.com", "www.autoitx.com", "www.autoitscript.com"]
For $i = 0 To 2
$oIE[$i] = _IECreate($Url[$i], 0, 1, 0)
Next
AdlibRegister("State", 100)
While Not($Complete)
Sleep(100)
WEnd
ConsoleWrite("Done!" & @LF)
Func State()
Local $State
If $Complete Then Return AdlibUnRegister("State")
For $i = 0 To 2
If Not $iComplete[$i] Then
$State = _IEPropertyGet($oIE[$i], "readyState")
If String($State) = "complete" Or $State = 4 Then
$iComplete[$i] = Not $iComplete[$i]
ConsoleWrite($Url[$i] & " Download Complete!" & @LF)
EndIf
EndIf
Next
If $iComplete And $iComplete And $iComplete Then $Complete = Not $Complete
EndFunc ;==>State
谢谢版主,这方法行! 留记号,以备参考 参考使用,记录! 做个记号先,过几天用得上! 非常好的思路!! 感谢lz分享哈,真的很赞呢 感谢lz分享,非常好的思路!!
页:
[1]
2