mycooled 发表于 2020-5-13 16:47:00

[已解决]执行ie批量注销用户,注销600人,但总是注销到40多人是报错

本帖最后由 mycooled 于 2020-5-15 13:07 编辑

执行ie批量注销用户,注销600人,但总是注销到40多人是报错,有时候也会注销60多人时报错,_IEGetObjByName,_IEGetObjById,_IETableGetCollection都可能出错,请教如何解决。我看有人说用if @error,_IEPropertyGet($oIE,"busy"),但我看busy得到的都是false,@error判断不知道如何操作

cxlater 发表于 2020-5-14 11:26:28

你用ie操作600个页面   就算成功了后面的操作占用的内存也会十分惊人.效率很低.

http是无状态的直接清理掉本地cookie呢   或者用http协议

mycooled 发表于 2020-5-14 12:35:34

我不是操作600个页面,是在同一个注销页面中提交600次
$tTxtRowVal = FileReadLine($oExcel)
          getOutWorkTxtVal($tTxtRowVal,@TAB,$oAgentCode,$oAgentName,$oIDNo)
          While $oAgentCode<>""
               _IELoadWait($oIE)
               Sleep(2000)
               ConsoleWrite("RowNum = " & $oRowNum & " AgentCode = " & $oAgentCode & "IDNo = " & $oIDNo & @crlf )
               $oID= _IEGetObjByName($oIE, "ID")
               _IEFormElementSetValue($oID, $oIDNo)
               $oName= _IEGetObjByName($oIE, "NAME")
               _IEFormElementSetValue($oName, $oAgentName)
               $oIsValid= _IEGetObjByName($oIE, "ISVALID")
               _IEFormElementSetValue($oIsValid, "0")
               $oSearch = _IEGetObjById ($oIE, "searchbutton")
               _IEAction ($oSearch, "click")
               _IELoadWait($oIE)
               ;$tBusy = _IEPropertyGet($oIE,"busy")
               ;ConsoleWrite("selectbutton busy = " & $tBusy & @crlf)

               ;$table = _IETableGetCollection ($oIE,0)
               $table= _IEGetObjById($oIE, "querytable" )
               Sleep(1000)

mycooled 发表于 2020-5-14 12:49:07

我怀疑是不是网页中的对象还没有装载成功,就已经被访问了,所以出现byid,byname出错。但我不知道怎么解决这个问题,看大神们有没有处理过相似的问题,我觉得总是加延迟sleep可能不是正解,因为毕竟网速什么的,是动态变化的,我这个要求比较急,看大神们能否给个建议

floor6ggg 发表于 2020-5-14 18:26:18

ie操作初学者的。。。个人感觉。。。
1.网页注销界面是否有一些限制,防持续大量的注销?
2.操作代码上,既然是同一个注销界面,楼主怀疑装载方面出错,那试试在循环注销之前,获取需要注销的几个值,避免反复的使用iegetobject........后面在循环注销600次的过程中,直接setvalue。。。。看看会不会有改善。。。。

mycooled 发表于 2020-5-15 11:29:59

感谢楼上的,我是刚学了2周autoit,所以感觉还欠缺很多,我按照你所说,把getbyid,getbyname放在循环之前,基本上没问题了,多谢多谢
页: [1]
查看完整版本: [已解决]执行ie批量注销用户,注销600人,但总是注销到40多人是报错