找回密码
 加入
搜索
查看: 3070|回复: 11

[IE类操作] 【已解决】点击一个按钮后出现打开对话框,代码一直等待

  [复制链接]
发表于 2017-9-6 08:52:27 | 显示全部楼层 |阅读模式
本帖最后由 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是不等待的意思,可我加上为何不管用,下面的语句不关闭打开对话框还是无法执行.
哪个兄弟知道麻劳指点一下呗.
发表于 2017-9-6 10:20:12 | 显示全部楼层
一直不喜欢关于au3操作ie方面的。。
稍微看了下帮助,,那个参数是 不管ie页面点开了没有都直接返回,,但是你的例子是打开了windows的系统打开框,那就不再是iexplorer对象范围了。
你首先得捕捉到那个弹出来的对话框的句柄,然后才能操作他
发表于 2017-9-6 12:24:39 | 显示全部楼层
 楼主| 发表于 2017-9-6 13:05:15 | 显示全部楼层
成功搞定!谢谢3#zghwelcome的指点
 楼主| 发表于 2017-9-6 13:08:02 | 显示全部楼层
回复 2# yamakawa


   你说的这个方法我都试了,不行的,因为进程会停留在弹出窗口这个语句就不往下走了,此时AU3代码被起,直到你手动处理完关闭这个弹窗,所以无论你之后的语句写的再好都没有用.
 楼主| 发表于 2017-9-6 13:09:34 | 显示全部楼层
我看这里的很多兄弟不知道如何处理网页里frame和iframe框架内的元素,建议不要急,先把DOM技术原理看熟,试一下VBS和JS小的脚本技术,再来学用AU3处理就得心应手多了.
 楼主| 发表于 2017-9-6 13:14:51 | 显示全部楼层
本帖最后由 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("[REGEXPTITLE:(?i)(.*Internet Explorer.*)]")
;_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) ;测试成功(点击增加附件函数)
发表于 2017-9-6 13:48:56 | 显示全部楼层
回复 7# dengpeiyou


    账号密码没删除
 楼主| 发表于 2017-9-6 14:06:43 | 显示全部楼层
回复 8# zghwelcome

多谢:
    已更正!!!

我的这是办公内网,用外网连不上的。
 楼主| 发表于 2017-9-8 17:00:16 | 显示全部楼层
怎么编辑主题放到已解决问题区,求操作说明
发表于 2017-9-8 22:54:05 | 显示全部楼层
回复 10# dengpeiyou


    标题里面添加 【已解决】 就可以了
发表于 2019-6-28 20:10:54 | 显示全部楼层
不错,学习了,
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-4-27 06:47 , Processed in 0.076413 second(s), 19 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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