_IEAction($oInput, "click")这样的点击如何控制返回时间?
其他类型的链接打开方式如_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 _IELoadWait
_IELoadWaitTimeout _IELoadWait
_IELoadWaitTimeout
这都试过,没用的,上面的_IEAction($oInput, "click")没返回,下面的句子不会执行。经过试验,运用这二个限时函数,前提是上面的函数能立即返回结果。 仅发送个动作指令
需要等待那么长时间?
是不是在别处卡住了
里面加入流输出调试看下。。。 $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
是不是满页面全是按钮
If @error <> 0 Then ExitLoop
这句好象不成功就退出
点击成功就继续下次循环。。。 俺是新手,这之前还不真知流测试这个概念,所以一时也不知道怎么用。
_IEAction($oInput, "click")后,网页会刷新的,显示的是按钮点击后的状态。如果网页打开正常,脚本执行没问题。如果是网页打开慢,比如一个图片文件老是在下载中,那脚本就一直等待中。我的问题就在这里,如何限制这个等待时间。
网页中相同的按钮数量不确定,有个站一个,有的站四五个也有,If @error <> 0 Then ExitLoop这句是避免点击后打开网页失败而导致脚本退出。说实话,这段时间被脚本退出搞惨哒,不得不在每个点击类的操作后加上错误 判断,迫不得已啊! 本帖最后由 _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
我也碰到过这样的问题 回复 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 ThenExitLoop
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
页:
[1]