找回密码
 加入
搜索
查看: 3967|回复: 8

[IE类操作] [已解决]用autoit编写的脚本停止在源程序提示窗口,不往下执行,请指教!

  [复制链接]
发表于 2016-8-29 11:36:08 | 显示全部楼层 |阅读模式
本帖最后由 老不懂 于 2016-9-13 12:37 编辑

我用autoit自动化处IE重复录入工作,确定URL、获得FORM、控件,填写文本后,按“写入”按钮提交_IEAction($oSubmit, "click"),这时源程序弹出一个提示窗口,TITLE是"提示信息",中间的文字是“你是否确认提交?”,下面是两个按钮“确定”、“取消”。用AUTOIT INFO查看窗口的CLASS是#32770,无论我用下面的那个语句,都无法获得提示窗口,也就无法send("{SPACE}")或ControlClick“确定”按钮。
WinWaitActive("提示信息","你是否确认提交?",5)
WinWaitActive("[CLASS:#32770]","你是否确认提交?",5)
WinWaitActive("[TITLE:提示信息;CLASS:#32770]","")
WinActivate("提示信息","你是否确认提交?")
WinActivate("[CLASS:#32770]")
而我autoit打开notepad,send几个汉字,关闭窗口,这里notepad触发一个#32770提示窗口,问是否保存,我用上面的语句都能获得窗口,并控制选择保存与否。
后来我在提交_IEAction($oSubmit, "click")之后,立即加一句MsgBox,发现脚本根本就走不到MsgBox这句,脚本停在了提示窗口。我手工点击提示窗口中的“确定”,脚本是可以正确走完的。上网查了很多,没有找到解决方案。到是有提醒用Opt("TrayIconDebug", 1) 查看脚本停在哪里,的确,经查找,提示停在_IEAction($oSubmit, "click")。
怎样才能获得提示窗口的控制权呢?请指教!
发表于 2016-8-29 16:29:54 | 显示全部楼层
这是进程阻塞,网页弹出窗口后,进程就暂停了的,所以后面的语句均不会执行,因此需要另开一个进程来等待判断
发表于 2016-8-31 14:34:12 | 显示全部楼层
回复 1# 老不懂


    多进程 搜索就有了
 楼主| 发表于 2016-9-1 09:28:54 | 显示全部楼层
谢谢chamlien和lin6051的指教!我在_IEAction($oSubmit, "click")前加了句Run(@AutoItExe & ' /AutoIt3ExecuteLine "Local $s=''提示信息'',$a=WinWait($s), $a=WinActivate($s), $a=ControlClick($s, '''', ''Button1'') "')仍然不行,但另一个相同的弹出提示窗口,Title=Windows Internet Explorer,我用上面的语句Run(@AutoItExe & ' /AutoIt3ExecuteLine "Local $s=''Windows Internet Explorer'',$a=WinWait($s), $a=WinActivate($s), $a=ControlClick($s, '''', ''Button1'') "')是行的。换成Send语句也正确,Run(@AutoItExe & ' /AutoIt3ExecuteLine "Local $s=''Windows Internet Explorer'',$a=WinWait($s), $a=WinActivate($s), $a=Send(''{Enter}'') "')。但是,用到汉字提示窗口'提示信息'时就不管用了,ControlClick,Send都不行。另外,用$a=Send(''{Enter}'')时,英文提示'Windows Internet Explorer'格式是对的,但用到汉字提示窗口'提示信息'时,脚本的格式自动错位成$a=Send(''  {Enter}''),看上去多了两个空格,删也删不掉。全句是这样Run(@AutoItExe & ' /AutoIt3ExecuteLine "Local $s=''提示信息'',$a=WinWait($s), $a=WinActivate($s), $a=Send(''  {Enter}'') "')。请指教问题出在哪里?
发表于 2016-9-1 10:01:09 | 显示全部楼层
之前遇到过这个情况,不能对窗口发送,只能SEND  SLEEP等待操作了。
发表于 2016-9-1 16:12:45 | 显示全部楼层
窗口直接close掉吧,不要点击什么东西。
 楼主| 发表于 2016-9-5 16:11:10 | 显示全部楼层
回复 6# 1361739590

直接close不能解决问题,弹出窗口要做判断的,不是确定,就不保存内容了,而我要保存。
发表于 2016-9-5 16:28:26 | 显示全部楼层
用这个  $a=Send(''{Enter}'')  应该可以的。
 楼主| 发表于 2016-9-12 17:31:36 | 显示全部楼层
最终我把CML命令另写一段脚本并编译,再在脚本中调用编译的exe,成功关闭弹出窗口,后续的脚本运行也是正确的。只是一段脚本非要变成二段,感觉不舒服,有高手指点最好!
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-4-24 00:28 , Processed in 0.080512 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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