papapa314 发表于 2011-2-5 00:14:49

_IEBodyReadText函数出错(已解决)

本帖最后由 papapa314 于 2011-2-7 22:54 编辑

我在循环语句中用_IEBodyReadText反复判断网页中的内容,但经过几次循环(次数不固定,可能还跟其他因素有关),脚本就自动退出,双击出错的地方显示的是IE.au3里的语句:
Return SetError($_IEStatus_Success, 0, $o_object.document.body.innerText)
不知这个是什么原因?该如何解决,谢谢各位!

mozha 发表于 2011-2-5 00:52:51

不知道是什么情况,把有问题的代码贴出来呀?

_ddqs. 发表于 2011-2-5 01:00:13

应该是对象(不存在)出错($o_object.document.body)
循环超标

_ddqs. 发表于 2011-2-5 01:04:03

去注册个错误处理函数(可以减低由脚本异常而退出的几率)

papapa314 发表于 2011-2-5 01:07:30

回复 3# _ddqs.


    谢谢!请问autoit里有限制循环的次数吗,为什么会出现循环超标呢?或者具体超标的次数有没有写在ie.au3里?
还不知道如何注册个错误处理函数,能否给个例子?

_ddqs. 发表于 2011-2-5 01:23:25

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:24:30

本帖最后由 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

_ddqs. 发表于 2011-2-5 01:34:04

如果你想了解更多出错信息,可以把下面函数加到脚本中,若不需要建个空函数也可!
译义供参考(或许不对书)
;------------------------------------/
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
;----------------------------------------------------------/

papapa314 发表于 2011-2-5 01:35:06

回复 6# _ddqs.


    我看了一下,这个虽然注册了一个错误处理函数,可是能保证循环不再超标吗?这里为什么会出现循环超标,源码已贴出,能否请兄弟帮忙看看?再次感谢!

_ddqs. 发表于 2011-2-5 01:46:40

对对象操作之前
先检测下;防访问异常
If IsObj($obj) Then
       
        ;再操作。。。
       
EndIf

_ddqs. 发表于 2011-2-5 02:08:26

循环貌似没问题
当操作对象时,是不是页面还没生成
先检测下

_ddqs. 发表于 2011-2-5 02:14:47

如果是对IE 提示页(找不到某网站)操作
可能访问不了(
你试下
)

papapa314 发表于 2011-2-7 22:54:02

本帖最后由 papapa314 于 2011-2-7 22:55 编辑

回复 12# _ddqs.

貌似是$oIE在网页网址改变的时候变量有时就不存在了,用_IEAttach重新定义$oIE,然后再进行操作,问题解决了,谢谢帮忙!
剩下的问题就是用了_IEAttach软件运行时会有警告,应该是_IEAttach函数本身的问题
页: [1]
查看完整版本: _IEBodyReadText函数出错(已解决)