找回密码
 加入
搜索
查看: 4834|回复: 9

[IE类操作] _IEAction($oInput, "click")这样的点击如何控制返回时间?

  [复制链接]
发表于 2011-1-1 21:00:44 | 显示全部楼层 |阅读模式
其他类型的链接打开方式如_IELinkClickByText等都有可选参数
[可选参数]: 定义在返回前是否等待窗口加载完毕
0 = 立即返回,不等待窗口加载
1 = (默认) 等待窗口加载完毕然后返回

但_IEAction($oInput, "click")这个找不到相应有参数,因此在运用此函数时,如果网页打开有问题那就只有等五分钟之后才能返回结果,这样很费用时间滴。
试过多次,在这条语句后加什么都没有用,因为上面不返回结果,下面的语句就没法执行。
在此请教一下各位高手,此问题有何解决方法?
因为要点击的按钮无name无ID,只有值,只能用这种方式处理。
$oInputs = _IETagNameGetCollection($oIE, "INPUT")
For $oInput In $oInputs
If $oInput.value = "Turn ON" Then _IEAction($oInput, "click")
If @error<>0 Then         ExitLoop       
Next
发表于 2011-1-2 00:47:13 | 显示全部楼层
_IELoadWait
_IELoadWaitTimeout
 楼主| 发表于 2011-1-2 10:07:07 | 显示全部楼层
_IELoadWait
_IELoadWaitTimeout
这都试过,没用的,上面的_IEAction($oInput, "click")没返回,下面的句子不会执行。经过试验,运用这二个限时函数,前提是上面的函数能立即返回结果。
发表于 2011-1-2 11:45:04 | 显示全部楼层
仅发送个动作指令
需要等待那么长时间?
是不是在别处卡住了
里面加入流输出调试看下。。。
发表于 2011-1-2 11:46:44 | 显示全部楼层
$oInputs = _IETagNameGetCollection($oIE, "INPUT")
For $oInput In $oInputs
        If $oInput.value = "Turn ON" Then 
                _IEAction($oInput, "click")
                If @error <> 0 Then ExitLoop
        EndIf
        ConsoleWrite("调试: "& $oInput &@LF)
Next
发表于 2011-1-2 11:50:37 | 显示全部楼层
是不是满页面全是按钮
If @error <> 0 Then ExitLoop
这句好象不成功就退出
点击成功就继续下次循环。。。
 楼主| 发表于 2011-1-2 14:43:07 | 显示全部楼层
俺是新手,这之前还不真知流测试这个概念,所以一时也不知道怎么用。
_IEAction($oInput, "click")后,网页会刷新的,显示的是按钮点击后的状态。如果网页打开正常,脚本执行没问题。如果是网页打开慢,比如一个图片文件老是在下载中,那脚本就一直等待中。我的问题就在这里,如何限制这个等待时间。
网页中相同的按钮数量不确定,有个站一个,有的站四五个也有,If @error <> 0 Then ExitLoop这句是避免点击后打开网页失败而导致脚本退出。说实话,这段时间被脚本退出搞惨哒,不得不在每个点击类的操作后加上错误 判断,迫不得已啊!
发表于 2011-1-2 15:59:08 | 显示全部楼层
本帖最后由 _ddqs. 于 2011-1-2 16:18 编辑

是不是可以这样写,你试下...
Func _TurnONClick()

        Local $loop = False ;是否循环标记

        $oInputs = _IETagNameGetCollection($oIE, "INPUT")

        For $oInput In $oInputs

                If $oInput.value = "Turn ON" Then

                        $loop = True

                        _IEAction($oInput, "click")

                        If @error <> 0 Then
                                Return 1 ;退出函数(如果点击出错)
                        Else

                                ;If @error <> 0 Then
                                ExitLoop ;如果点击 是 GET 或 POST 的请求,则说明返回的将是一个新的页面,继续循环好似没意义,效果也非预期想要的,可以退出循环了!
                                ;如果新页面还是这个操作!可以把这段代码做成一个函数反复调用。。
                        EndIf

                EndIf

                If Not @Compiled Then ConsoleWrite("调试用: " & $oInput & @LF)

        Next

        If $loop Then
                _IELoadWait($oIE, 1000, 33000) ;等候加栽(超时值设置)
                _TurnONClick() ;循环自身
        EndIf

EndFunc   ;==>_TurnONClick
发表于 2011-1-2 19:39:32 | 显示全部楼层
我也碰到过这样的问题
 楼主| 发表于 2011-1-3 16:31:31 | 显示全部楼层
回复 8# _ddqs.
谢谢你的指点,但试过之后没有效果。依然长时间等待。在控制台可以看见脚本一直在循环,记录太长,只取一段到这里看看。

0002: 0-0: #AutoIt3Wrapper_run_debug_mode=Y
0003: 0-0: #include <IE.au3>
0004: 0-0: Opt("WinTitleMatchMode", 2)
0007: 0-0: WinActivate("Maxthon", "")
0008: 0-2: $oIE = _IEAttach("", "Instance", 1)
0011: 0-0:         For $i1 = 1 To 3
0012: 0-0:                 $ym = _IEDocReadHTML($oIE)
0013: 0-0:                 Sleep(4000)
0015: 0-0: If        StringRegExp($ym, "Paid emails", 0) = 0 Then  ExitLoop
0016: 0-0: MsgBox(0,"开关","邮件开关存在")
@CRLF)
0017: 0-0: If        StringRegExp($ym, "(?s)Paid emails.+?Turn OFF", 0) = 1 Then
0021: 0-0:                 If        StringRegExp($ym, "Preferences", 0) = 1 Then
0022: 0-0:                                 _IELinkClickByText($oIE, "Preferences")
0023: 0-0:                         If StringRegExp($ym, "Turn ON", 0) = 1 Then       
0027: 0-0:                                 _TurnONClick()
0039: 0-0:         Local $loop = False ;是否循环标记
0041: 0-0:         $oInputs = _IETagNameGetCollection($oIE, "INPUT")
0043: 0-17:         For $oInput In $oInputs
0045: 0-17:                 If $oInput.value = "Turn ON" Then
0062: 0-17:                 If Not @Compiled Then ConsoleWrite("调试用: " & $oInput & @LF)
调试用:
0064: 0-0:         Next
0045: 0-0:                 If $oInput.value = "Turn ON" Then
0062: 0-0:                 If Not @Compiled Then ConsoleWrite("调试用: " & $oInput & @LF)
调试用:
0064: 0-0:         Next
0045: 0-0:                 If $oInput.value = "Turn ON" Then
0062: 0-0:                 If Not @Compiled Then ConsoleWrite("调试用: " & $oInput & @LF)
调试用:
0064: 0-0:         Next
0045: 0-0:                 If $oInput.value = "Turn ON" Then
0047: 0-0:                         $loop = True
0049: 0-0:                         _IEAction($oInput, "click")
0051: 0-0:                         If @error <> 0 Then
0056: 0-0:                                 ExitLoop ;如果点击 是 GET 或 POST 的请求,则说明返回的将是一个新的页面,继续循环好似没意义,效果也非预期想要的,可以退出循环了!
0066: 0-0:         If $loop Then
0067: 0-0:                 _IELoadWait($oIE, 1000, 5000) ;等候加栽(超时值设置)
0068: 0-0:                 _TurnONClick() ;循环自身
0039: 0-0:         Local $loop = False ;是否循环标记
0041: 0-0:         $oInputs = _IETagNameGetCollection($oIE, "INPUT")
@CRLF)0043: 0-17:         For $oInput In $oInputs
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-11-15 18:14 , Processed in 0.077516 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表