_IEBodyReadText函数出错(已解决)
本帖最后由 papapa314 于 2011-2-7 22:54 编辑我在循环语句中用_IEBodyReadText反复判断网页中的内容,但经过几次循环(次数不固定,可能还跟其他因素有关),脚本就自动退出,双击出错的地方显示的是IE.au3里的语句:
Return SetError($_IEStatus_Success, 0, $o_object.document.body.innerText)
不知这个是什么原因?该如何解决,谢谢各位! 不知道是什么情况,把有问题的代码贴出来呀? 应该是对象(不存在)出错($o_object.document.body)
循环超标 去注册个错误处理函数(可以减低由脚本异常而退出的几率) 回复 3# _ddqs.
谢谢!请问autoit里有限制循环的次数吗,为什么会出现循环超标呢?或者具体超标的次数有没有写在ie.au3里?
还不知道如何注册个错误处理函数,能否给个例子? http://www.autoitx.com/forum.php?mod=redirect&goto=findpost&ptid=21455&pid=260650&fromuid=7653769;----------------------------/
;程序异常处理
Global $MyError = ObjEvent("AutoIt.Error", "_MyErrHandler") ;初始化错误处理程序
;
Func _MyErrHandler()
;Return
EndFunc ;==>_MyErrHandler
;----------------------------/#include <IE.au3>
_IEErrorHandlerRegister() 本帖最后由 papapa314 于 2011-2-5 01:26 编辑
代码如下:
For $i=0 To _GUICtrlListView_GetItemCount($listview1)-1
fun1()
For $j=1 To 36
Sleep(4000)
If StringInStr($oIE.document.body.innerText,"失败") Then
ExitLoop
ElseIf StringInStr($oIE.document.body.innerText,"标题") Then
Sleep(1000)
fun2()
ExitLoop
Else
Sleep(1)
EndIf
Next
If Mod($j,36)=0 Then
TrayTip("提示","超时",8)
EndIf
Next 如果你想了解更多出错信息,可以把下面函数加到脚本中,若不需要建个空函数也可!
译义供参考(或许不对书)
;------------------------------------/
Func _MyErrHandler()
;Return SetError(1, 0, "") ;返回不提示
If Not @Compiled Then
Local $Number = $MyError.number
Local $HexNumber = Hex($Number, 8)
;echo("错误输出行号: " & @ScriptLineNumber & " 脚本出错行号: " & $MyError.scriptline & " 系统提示信息: " & StringStripWS($MyError.windescription, 2))
;#CS
ConsoleWrite(@CRLF & _
"┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓" & @CRLF & _
"┃ 已捕捉到一个错误的接口信息! " & @CRLF & _
"┠━━━━━━━━━━━━━━━━━━━━━━━━━━━━┨" & @CRLF & _
"┃" & @CRLF & _
"┃----> 异常文件: " & @ScriptName & @CRLF & _
"┃----> 故障说明: " & StringStripWS($MyError.description, 2) & @CRLF & _
"┃----> 错误代码: " & "0x" & $HexNumber & "(" & $Number & ")" & @CRLF & _
"┃----> 模块错误: " & $MyError.lastdllerror & @CRLF & _ ;主程序所需的动态链接库返回的错误代码
"┃----> 脚本行号: " & $MyError.scriptline & @CRLF & _
"┃----> 错误来源: " & $MyError.source & @CRLF & _
"┃----> 帮助文件: " & $MyError.helpfile & @CRLF & _
"┃----> 帮助主题: " & $MyError.helpcontext & @CRLF & _
"┃----> 系统描述: " & StringStripWS($MyError.windescription, 2) & @CRLF & _
"┃" & @CRLF & _
"┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛" & @CRLF & _
@CRLF & _
"行号: " & @ScriptLineNumber _
)
;#CE
EndIf
Return SetError(1, 0, "") ; 检查后返回
EndFunc ;==>_MyErrHandler
;----------------------------------------------------------/
回复 6# _ddqs.
我看了一下,这个虽然注册了一个错误处理函数,可是能保证循环不再超标吗?这里为什么会出现循环超标,源码已贴出,能否请兄弟帮忙看看?再次感谢! 对对象操作之前
先检测下;防访问异常
If IsObj($obj) Then
;再操作。。。
EndIf
循环貌似没问题
当操作对象时,是不是页面还没生成
先检测下 如果是对IE 提示页(找不到某网站)操作
可能访问不了(
你试下
) 本帖最后由 papapa314 于 2011-2-7 22:55 编辑
回复 12# _ddqs.
貌似是$oIE在网页网址改变的时候变量有时就不存在了,用_IEAttach重新定义$oIE,然后再进行操作,问题解决了,谢谢帮忙!
剩下的问题就是用了_IEAttach软件运行时会有警告,应该是_IEAttach函数本身的问题
页:
[1]