【已解决】点击一个按钮后出现打开对话框,代码一直等待
本帖最后由 dengpeiyou 于 2017-9-10 13:35 编辑用这个函数:
_IEImgClick($oIE, "http://oa.yydl.com.cn/oa/jm.nsf/i.attachfile.gif", "src",0,0)
可以成功点击鼠标,但点击后出来windows系统打开对话框,我后面的语句试图对这个打开对话框进行处理,但它不走了,下面的语句无法执行.
我查了_IEImgClick这个函数,它的参数最后一个为0是不等待的意思,可我加上为何不管用,下面的语句不关闭打开对话框还是无法执行.
哪个兄弟知道麻劳指点一下呗. 一直不喜欢关于au3操作ie方面的。。
稍微看了下帮助,,那个参数是 不管ie页面点开了没有都直接返回,,但是你的例子是打开了windows的系统打开框,那就不再是iexplorer对象范围了。
你首先得捕捉到那个弹出来的对话框的句柄,然后才能操作他 参考文章 http://www.autoitx.com/thread-36634-1-1.html 成功搞定!谢谢3#zghwelcome的指点 回复 2# yamakawa
你说的这个方法我都试了,不行的,因为进程会停留在弹出窗口这个语句就不往下走了,此时AU3代码被起,直到你手动处理完关闭这个弹窗,所以无论你之后的语句写的再好都没有用. 我看这里的很多兄弟不知道如何处理网页里frame和iframe框架内的元素,建议不要急,先把DOM技术原理看熟,试一下VBS和JS小的脚本技术,再来学用AU3处理就得心应手多了. 本帖最后由 dengpeiyou 于 2017-9-6 13:57 编辑
为了感谢zghwelcome的共享精神,我把我写的源码全部贡献出来
;===================================================
;国家电网河南省OA自动化登录程序
;作者:QQ;185062666 2017.9.3
;===================================================
#include <IE.au3>
#include<array.au3>
#include <MsgBoxConstants.au3>
; 创建IE对象并转到指定网页
Local $oIE = _IECreate("http://oa.yydl.com.cn")
_IEAction($oIE,"visible")
WinActivate("原阳县电业局OA首页 - Windows Internet Explorer","")
WinSetState ( "原阳县电业局OA首页 - Windows Internet Explorer", "http://oa.yydl.com.cn", @SW_MAXIMIZE )
$oForm = _IEFormGetCollection ($oIE, 0)
Local $oName = _IEGetObjById($oIE, "UserName")
If $oName<>0 Then
$oName.value="dengpeiyou"
Local $oPassword = _IEGetObjById($oIE, "UserName")
Local $oPassword= _IEGetObjById($oIE, "Password")
$oPassword.value="******"
_IEFormSubmit ($oForm,0);提交(提交即关闭页面,所以不等待,这个参数0是必须的)
EndIf
;点击<邮件>按钮
Sleep(1000)
$oIE = _IEAttach ("办公自动化系统")
Local $oMenuTable= _IEGetObjById($oIE, "wdMenuTable")
Local $oLinks= _IETagNameGetCollection($oIE, "td")
For $oLink In $oLinks
If StringInStr($oLink.innertext, " 邮 件 ") And StringLen($oLink.innertext)<10 Then;找到<邮件>按钮,点击
Sleep(1000) ;极小的延时(必须)
_IEAction($oLink, "click")
exitloop
EndIf
Next
;点击写邮件按钮
$oFrameA=_IEFrameGetObjByName($oIE,"WebDesignerHomePageIFrame" );处理网页中的一级FRAME.
_IELoadWait($oFrameA)
$oFrameB=_IEFrameGetObjByName($oFrameA,"WebDesignerView" );处理网页中的二级FRAME.
Sleep(1000)
$oLinks = _IELinkGetCollection($oFrameB);获取FRAME中的全部链接。
Local $oLinks= _IETagNameGetCollection($oFrameB, "td")
For $oLink In $oLinks
If StringInStr($oLink.innertext,"写邮件") And StringLen($oLink.innertext)<8 Then;找到邮件按钮,点击
Sleep(1000) ;极小的延时(必须)
_IEAction($oLink, "click")
ExitLoop
EndIf
Next
send("^{TAB}")
Sleep(1000)
$oIE = _IEAttach ("邮件草稿")
Local $oSendTo = _IEGetObjById($oIE, "TempSendTo")
$oSendTo.value="XXXXXX/信通运检班/运维检修部/XXXX县电业局"
Local $oSubject = _IEGetObjById($oIE, "Subject")
$oSubject.value="有违规记录信息"
;按12次Tab键到内容输入
For $i=1 To 12
send("{TAB}")
Sleep(50)
Next
;填写正文内容
send(_ReadFileAll(@DesktopDir & "\test.txt"))
;在弹窗前新建一个命令行AU3线程,一直查找等待弹窗出现
Run(@AutoItExe & ' /AutoIt3ExecuteLine"Dim $s=''提示'',$a=WinWait($s), $a=WinActivate($s), $a=ControlClick($s, '''', ''buttonOK''), $a=WinClose($s), $a=WinWait($s), $a=WinActivate($s), $a=ControlClick($s, '''', ''buttonOK'')"')
;点击<发送>按钮
ControlClick("邮件草稿", "发送","")
;之后弹出的关闭确认窗口被上面的创建的进程成功关闭,上面的进程结束
$oIE.document.parentWindow.execscript("fnSendMail()") ;点击发送
MsgBox(0, "提示", "执行到这了") ;临时设断
;==============================================================================
;获取一个文本文件的全部内容
;==============================================================================
Func _ReadFileAll($FileName)
Local $file = FileOpen($FileName, 0)
If $file = -1 Then
MsgBox(4096, "错误", "不能打开文件.")
Exit
EndIf
Local $lines
$lines=""
While 1
Local $line = FileReadLine($file); 每次读取一行文本,直到文件结束.
If @error = -1 Then ExitLoop
$lines=$lines & @CRLF& $line
WEnd
FileClose($file)
Return $lines
EndFunc
;==============================================================================
;获取一个IE对象的全部图片键接
;==============================================================================
Func AllImgsLink(ByRef $oMenuTable)
Local $oImgs = _IEImgGetCollection($oMenuTable)
Local $iNumImg = @extended
Local $sTxt = "这个页面总共有 " & $iNumImg & "个图片链接" & @CRLF & @CRLF
For $oImg In $oImgs
$sTxt &= $oImg.src & @CRLF
Next
MsgBox($MB_SYSTEMMODAL, "图片信息", $sTxt)
EndFunc
Exit
;==============================================================================
;以下为调试过程中产生的代码
;==============================================================================
;MsgBox(0, "提示", "执行到这了") ;临时设断
;MsgBox(0, "提示", _IEPropertyGet ($oIE, "locationurl")) ;用于查看IE对象的当前网址
;MsgBox($MB_SYSTEMMODAL, "提示", _IEPropertyGet($oMenuTable, "innerHTML")) ;显示一个IE对象的HTML源码
;列出桌面可见标题窗口
;Local $aList = WinList("")
;_ArrayDisplay($aList)
;执行外部的JS函数(通过两种方式点击一个按钮)
;$oIE.document.parentWindow.execscript("fnMailAddAttachment()") ;在AU3里执行JS代码,调用打开附件函数
;_IEImgClick($oIE, "http://oa.yydl.com.cn/oa/jm.nsf/i.attachfile.gif", "src",0,0) ;测试成功(点击增加附件函数) 回复 7# dengpeiyou
{:face (361):} 账号密码没删除 回复 8# zghwelcome
多谢:
已更正!!!
我的这是办公内网,用外网连不上的。 怎么编辑主题放到已解决问题区,求操作说明 回复 10# dengpeiyou
标题里面添加 【已解决】 就可以了 不错,学习了,
页:
[1]