找回密码
 加入
搜索
查看: 8125|回复: 6

[IE类操作] 【已解决】关于关闭网页安全提示框的方法和无法填写部分表单的问题

[复制链接]
发表于 2012-10-23 17:22:27 | 显示全部楼层 |阅读模式
本帖最后由 tjztbk 于 2012-10-23 23:58 编辑

刚刚开始学习AutoIT3,现在想做个自动留言的小程序,在填写网页表单时遇到两个问题,特向各位请教!

第一个问题就是打开html文件时IE弹出的信息栏(黄条),对它的操作有没有更好办法!
第二个问题就是填写留言类型表单的时候无法正常填写,这种下拉列表有什么好办法吗?比如的通过设置什么参数不让它出现呢。

代码如下:
#include <IE.au3>
$oIE = _IECreate (@ScriptDir&"\留言.html",0,1,0,0)       ;第三个参数为0,表示不等待完全载入就返回,而有时间$Oie没有检测到IE加载完毕(IE弹出对话框时网页加载会中断)可能造成不会执行下面代码的现象。
WinSetState(WinGetTitle("[active]") , "", @SW_MAXIMIZE)  ; 最大化窗口

sleep(300)                                               ;为测试程序看清过程而设置的暂停(下同)
If WinActivate("信息栏","您注意到信息栏了吗?") Then    ;关闭信息栏窗口,不一定所有电脑出现,所以加判断
        sleep(300)
        ControlClick ("信息栏","您注意到信息栏了吗?","Button1")
EndIf

;以下几行代码是为关闭打开html文件时IE弹出的信息栏(黄条),如果不关闭部分表单无法正常填写。我是基本模拟键盘操作完成的,不知道有没有更好的办法,比如的通过设置什么参数不让它出现呢。还有这个黄条也不是所有电脑都出现,如何添加判断呢?
sleep(300)
ControlClick ( WinGetTitle("[active]") , "","Button1")
sleep(300)
Send("A")
sleep(300)
WinActivate("安全警告", "允许活动内容(如脚本和 ActiveX 控件)可能对您有所帮助")
sleep(300)
ControlClick ( "安全警告", "允许活动内容(如脚本和 ActiveX 控件)可能对您有所帮助","Button1")
sleep(300)

;开始填写内容
$oForm = _IEFormGetObjByName ($oIE, "form1")
$oQuery1 = _IEFormElementGetObjByName ($oForm, "zw")
_IEFormElementSetValue ($oQuery1, 3)       ;选择职务
sleep(800)

;就是下面填写“发帖类型”和“发帖类型子类”部分下面代码我想了好多办法都无法实现正确填写。
$oQuery2_1 = _IEFormElementGetObjByName ($oForm, "example")
_IEFormElementSetValue ($oQuery2_1, "9999")       ;选发帖类型(无法正常填写)
sleep(800)
$oQuery2_2 = _IEFormElementGetObjByName ($oForm, "stage2")
_IEFormElementSetValue ($oQuery2_2, 1)       ;选发帖类型子类(无法正常填写)
sleep(800)


$oQuery4 = _IEFormElementGetObjByName ($oForm, "city")
_IEFormElementSetValue ($oQuery4, 11)       ;选所属地市:
sleep(800)
$oQuery5 = _IEFormElementGetObjByName ($oForm, "unit")
_IEFormElementSetValue ($oQuery5, "广东省江门市北郊五福街")       ;填写单位
sleep(800)
$oQuery6 = _IEFormElementGetObjByName ($oForm, "email")
_IEFormElementSetValue ($oQuery6, "tjztbk@126.com")       ;填写Email
sleep(800)
$oQuery7 = _IEFormElementGetObjByName ($oForm, "phone")
_IEFormElementSetValue ($oQuery7, "0750-888888")       ;填写电话号码
sleep(800)
$oQuery8 = _IEFormElementGetObjByName ($oForm, "title")
_IEFormElementSetValue ($oQuery8, "留言标题")       ;填写标题
sleep(800)
$oQuery9 = _IEFormElementGetObjByName ($oForm, "content")
_IEFormElementSetValue ($oQuery9, "留言内容")       ;填写内容
sleep(800)
$oQuery10 = _IEFormElementGetObjByName ($oForm, "category")
_IEFormElementSetValue ($oQuery10, 16)       ;选择发帖专题

sleep(3000)  

$oQuery11 = _IEFormElementGetObjByName ($oForm, "Submit")
_IEAction($oQuery11 ,"click")        ;点击发送发帖专题
sleep(800)
_IEQuit ($oIE)     ;关闭IE
代码和网页都在附件里有!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
 楼主| 发表于 2012-10-23 17:24:48 | 显示全部楼层
本帖最后由 tjztbk 于 2012-10-23 19:58 编辑

把网页“留言.html”内容也贴到这里!希望各位有空帮我看看!
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>留言</title>
<style type="text/css">
<!--
body {
        margin-top: 0px;
        margin-bottom: 0px;
}
-->
</style>
<link href="images/css.css" rel="stylesheet" type="text/css">
<style type="text/css">
<!--
.style2 {
        color: #FFFFFF;
        font-weight: bold;
}
.fram {        font-size: 10pt;
        background-image: url(images/fram.gif);
        border: 1px solid #666666;
}
.style3 {color: #FF0000}
.tableBorder {        BORDER-RIGHT: #183789 1px solid; BORDER-TOP: #183789 1px solid; BORDER-LEFT: #183789 1px solid; BORDER-BOTTOM: #183789 1px solid; BACKGROUND-COLOR: #ffffff
}
-->
</style>
<link href="../images/css.css" rel="stylesheet" type="text/css">
<style type="text/css">
<!--
.STYLE4 {color: #FF0000; font-weight: bold; }
-->
</style>
</head>
<body>
<div align="center">
  <table width="999" border="0" align="center" cellpadding="0" cellspacing="0">
    <tr>
      <td><table width="999" border="0" align="center" cellpadding="0" cellspacing="0">
  <tr>
    <td background="new_images/head_1.jpg"> </td>
  </tr>
</table></td>
    </tr>
  </table>
  <br>
  <table width="999" border="0" cellspacing="0" cellpadding="3">
    <tr>
      <td bgcolor="#F5F5F5"> </td>
    </tr>
  </table>
  <br>
  <table width="999" border="0" cellpadding="0" cellspacing="1" bgcolor="#64A4DC">
    <tr bgcolor="#64A4DC">
      <td><div align="left" class="style2"></div></td>
    </tr>
    <tr valign="middle" bgcolor="#F2F2F2">
      <td height="10" bgcolor="#F2F2F2"><div align="left"><span class="unnamed1">留言</span></div></td>
    </tr>
    <tr>
      <td height="50" bgcolor="#FFFFFF"><div align="center" class="STYLE4">
        <p> </p>
      </div>
        <div align="left">
          <table width="80%" border="0" align="center" cellpadding="4" cellspacing="1" bgcolor="#FFFFFF" class="tableBorder">
            <form name="form1" method="post" action="mjly_post_rs.asp">
              <tr bgcolor="#EDF5F9">
                <td width="18%" class="forumRow">
                  <div align="right">姓名:</div></td>
                <td width="82%" class="forumRow"> tjztbk                    </td>
              </tr>
              <tr>
                <td width="18%" class="forumRow">
                  <div align="right">职务:</div></td>
                <td class="forumRow">                  <select name="zw">
                  <option value="0">--请选择你的级别--</option>
                                  <option value="1">厅局级</option>
                  <option value="2">处局级</option>
                  <option value="3">科所队</option>
                  <option value="4">科员</option>
                  <option value="5">办事员</option>
                                     <option value="6">其它</option>
                  </select>
                  <span class="forumRow"><span class="style3">*该项为必选项</span></span></td></tr>
              <tr bgcolor="#EDF5F9">
                <td width="18%" class="forumRow">
                  <div align="right">留言类型:</div></td>
                <td class="forumRow">
<select name="example" size="1" onChange="redirect(this.options.selectedIndex)">
<option>--选择大类--</option>
<option>综合</option>
<option>业务</option>
<option>队伍建设</option>
<option>后勤保障</option>
</select>
<select name="stage2" size="1">
<option value="9999">--请选择--</option>
</select>
<script>
<!--
/*
  Double Combo Script Credit
  By Website Abstraction (www.wsabstract.com)
  Over 200+ free JavaScripts here!
  */
var groups=document.form1.example.options.length
  var group=new Array(groups)
  for (i=0; i<groups; i++)
  group[i]=new Array()
  group[0][0]=new Option("--请选择--","9999")
  group[1][0]=new Option("综合","1")
    group[2][0]=new Option("工作","2")
        group[2][1]=new Option("信息化","3")
        group[2][2]=new Option("其他","4")
  group[3][0]=new Option("教育培训","5")
    group[3][1]=new Option("人事工作","6")
    group[3][2]=new Option("组织纪律","7")
    group[3][3]=new Option("其他","8")
  group[4][0]=new Option("后勤保障","9")
var temp=document.form1.stage2
function redirect(x){
  for (m=temp.options.length-1;m>0;m--)
  temp.options[m]=null
  for (i=0;i<group[x].length;i++){
  temp.options[i]=new Option(group[x][i].text,group[x][i].value)
  }
  temp.options[0].selected=true
  }
function go(){
  location=temp.options[temp.selectedIndex].value
  }
  //-->
  </script>
<span class="style3">*该项为必选项</span></td>
              </tr>               <tr bgcolor="#EDF5F9">
                <td width="18%" class="forumRow">
                  <div align="right">所属地市:</div></td>
                <td class="forumRow">
                                <select name="city" id="city">
                                <option value="0">-请选择-</option>
                <option value="1">省厅</option>
                <option value="2">广州</option>
                <option value="3">深圳</option>
                <option value="4">珠海</option>
                <option value="5">中山</option>
                <option value="6">佛山</option>
                <option value="7">潮州</option>
                <option value="8">东莞</option>
                <option value="9">河源</option>
                <option value="10">惠州</option>
                <option value="11">江门</option>
                <option value="12">揭阳</option>
                <option value="13">茂名</option>
                <option value="14">梅州</option>
                <option value="15">清远</option>
                <option value="16">汕头</option>
                <option value="17">汕尾</option>
                <option value="18">韶关</option>
                <option value="19">阳江</option>
                <option value="20">云浮</option>
                <option value="21">湛江</option>
                <option value="22">肇庆</option>
                </select>
                  <span class="style3">*该项为必选项</span></td>
              </tr>              <tr bgcolor="#EDF5F9">
                <td width="18%" class="forumRow">
                  <div align="right">单位:</div></td>
                <td class="forumRow">

<input name="unit" type="text" class="fram" id="zw" value="" size="40">
</td>
              </tr>
              <tr>
                <td class="forumRow"><div align="right">EMAIL:</div></td>
                <td class="forumRow"><input name="email" type="text" class="fram" id="email" value="" size="40">
                    <span class="style3">(请留下你的邮箱,以便回复)</span></td>
              </tr>
              <tr bgcolor="#EDF5F9">
                <td class="forumRow"><div align="right">电话:</div></td>
                <td class="forumRow"><input name="phone" type="text" class="fram" id="phone" size="40">
                  <span class="style3">(请留下你的电话,以便回复)</span></td>
              </tr>
              <tr>
                <td class="forumRow">
                  <div align="right">标题:</div></td>
                <td class="forumRow"><input name="title" type="text" class="fram" id="title" size="40">
                  <span class="forumRow"><span class="style3">*该项为必填项</span></span></td>
              </tr>                          
              <tr bgcolor="#EDF5F9">
                <td width="18%" height="73" class="forumRowHighlight">
                  <div align="right">内容:</div></td>
                <td height="73" class="forumRowHighlight">
                  <textarea name="content" cols="60" rows="15" class="fram" id="content"></textarea>                </td>
              </tr>
              <tr>
                <td class="forumRow">
                  <div align="right">发贴版块:</div></td>
                <td class="forumRow">               
                  
                                <select name="category" id="category">
                                <option value="1" selected>普通留言</option>
                                
                                <option value="16">新时期核心价值观专栏</option>
                                
                </select>
                <span class="forumRow"><span class="style3">*该项为必填项</span></span></td>
              </tr>                                  
              <tr>
                <td colspan="2" class="forumRow">
                  <div align="center">
                    <input type="submit" name="Submit" value="发表" class="fram">
            
          <input type="reset" name="Submit2" value="重写" class="fram">
                </div></td>
              </tr>
            </form>
          </table>
      `</div></td>
    </tr>
  </table>
</div>
</body>
</html>
发表于 2012-10-23 20:25:48 | 显示全部楼层
#include <IE.au3>
 $oIE = _IECreate (@ScriptDir&"\留言.html", 1) 
 
 $oQuery1 = _IEGetObjByName ($oIE, "zw")
 _IEFormElementOptionSelect($oQuery1, 3);选择职务 byValue
 
 $oQuery2_1 = _IEGetObjByName ($oIE, "example")
 _IEFormElementOptionSelect($oQuery2_1, "业务", 1, "byText");选发帖类型 byText
 
 Sleep(100);选择“类型”后触发OnChange事件,延时下让“子类型”刷新数据
 
 $oQuery2_2 = _IEGetObjByName ($oIE, "stage2")
 _IEFormElementOptionSelect($oQuery2_1, 2, 1, "byIndex");选发帖类型子类 byIndex 基于0索引
 
 $oQuery4 = _IEGetObjByName ($oIE, "city")
 _IEFormElementOptionSelect($oQuery4, 11)       ;选所属地市:
 
 $oQuery5 = _IEGetObjByName ($oIE, "unit")
 $oQuery5.value = "广东省江门市北郊五福街"       ;填写单位
 
 $oQuery6 = _IEGetObjByName ($oIE, "email")
 $oQuery6.value = "tjztbk@126.com"       ;填写Email
 
 $oQuery7 = _IEGetObjByName ($oIE, "phone")
 $oQuery7.value = "0750-888888"      ;填写电话号码
 
 $oQuery8 = _IEGetObjByName ($oIE, "title")
 $oQuery8.value = "留言标题"      ;填写标题
 
 $oQuery9 = _IEGetObjByName ($oIE, "content")
 $oQuery9.value = "留言内容"      ;填写内容
 
 $oQuery10 = _IEGetObjByName ($oIE, "category")
 _IEFormElementOptionSelect($oQuery10, 16)       ;选择发帖专题
 
 $oQuery11 = _IEGetObjByName ($oIE, "Submit")
 $oQuery11.click        ;点击发送发帖专题
 
 ;_IEQuit ($oIE)     ;关闭IE

评分

参与人数 1金钱 +20 收起 理由
tjztbk + 20 感谢你的回复!!

查看全部评分

 楼主| 发表于 2012-10-24 00:02:39 | 显示全部楼层
非常感谢“komaau3 ”的回复,问题基本解决了!

不过一开始“komaau3 ”的回复中,第13行代码中的变量“$oQuery2_2”写成“$oQuery2_1”,所以一开始调试多次子类无法正确选择,呵呵!
 楼主| 发表于 2012-10-24 00:05:59 | 显示全部楼层
本帖最后由 tjztbk 于 2012-10-24 00:17 编辑

解决问题后的代码贴出来,以便其他比我还菜鸟的(估计有也是很少)学习!呵呵
#include <IE.au3>
$oIE = _IECreate (@ScriptDir&"\留言.html",0,1,0,0) 

If WinActivate("信息栏","您注意到信息栏了吗?") Then    ;关闭信息栏窗口,不一定所有电脑出现,所以加判断
        ControlClick ("信息栏","您注意到信息栏了吗?","Button1")
        sleep(100)
EndIf

If ControlCommand (  WinGetTitle("[active]"), "", "Button1","IsVisible", "") Then ;这里通过实现按钮判断IE是否弹出安全信息栏(黄条),并通过模拟鼠标键盘完成操作(容许阻止的内容),暂时想不到更好的办法!
        ControlClick ( WinGetTitle("[active]") , "","Button1")
        sleep(100)
        Send("A")
        WinActivate("安全警告", "允许活动内容(如脚本和 ActiveX 控件)可能对您有所帮助")
        ControlClick ( "安全警告", "允许活动内容(如脚本和 ActiveX 控件)可能对您有所帮助","Button1")
        sleep(100)
EndIf

;开始填写内容
 $oQuery1 = _IEGetObjByName ($oIE, "zw")
 _IEFormElementOptionSelect($oQuery1, 3);选择职务 byValue
 _IEFormElementSetValue ($oQuery1, 3)       ;选择职务
 
 $oQuery2_1 = _IEGetObjByName ($oIE, "example")
_IEFormElementOptionSelect($oQuery2_1, "队伍建设", 1, "byText");选发帖类型 byText  (我测试过这里搜索模式是byIndex也可以实现。)
  
 Sleep(100);选择“类型”后触发OnChange事件,延时下让“子类型”刷新数据

 $oQuery2_2 = _IEGetObjByName ($oIE, "stage2")
 _IEFormElementOptionSelect($oQuery2_2, 2, 1, "byIndex");选发帖类型子类 byIndex 基于0索引(我测试过这里搜索模式是byText和byValue也都可以实现)
 
 $oQuery4 = _IEGetObjByName ($oIE, "city")
 _IEFormElementOptionSelect($oQuery4, 11)       ;选所属地市:
 
 $oQuery5 = _IEGetObjByName ($oIE, "unit")
 $oQuery5.value = "广东省江门市北郊五福街"       ;填写单位
 
 $oQuery6 = _IEGetObjByName ($oIE, "email")
 $oQuery6.value = "tjztbk@126.com"       ;填写Email
 
 $oQuery7 = _IEGetObjByName ($oIE, "phone")
 $oQuery7.value = "0750-888888"      ;填写电话号码
 
 $oQuery8 = _IEGetObjByName ($oIE, "title")
 $oQuery8.value = "留言标题"      ;填写标题
 
 $oQuery9 = _IEGetObjByName ($oIE, "content")
 $oQuery9.value = "留言内容"      ;填写内容
 
 $oQuery10 = _IEGetObjByName ($oIE, "category")
 _IEFormElementOptionSelect($oQuery10, 16)       ;选择发帖专题
 
 sleep(3000) ;暂停几秒看看输入有没问题
 $oQuery11 = _IEGetObjByName ($oIE, "Submit")
 _IEAction($oQuery11 ,"click")        ;点击发送发帖专题
sleep(3000) ;暂停等待网页提交
_IEQuit ($oIE)     ;关闭IE
发表于 2014-6-19 10:36:39 | 显示全部楼层
mark 好难找啊 之前看过见天用竟然差点找不到
发表于 2014-6-19 10:36:42 | 显示全部楼层
mark 好难找啊 之前看过见天用竟然差点找不到
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-5-20 02:51 , Processed in 0.090026 second(s), 29 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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