tjztbk 发表于 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("") , "", @SW_MAXIMIZE); 最大化窗口

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

;以下几行代码是为关闭打开html文件时IE弹出的信息栏(黄条),如果不关闭部分表单无法正常填写。我是基本模拟键盘操作完成的,不知道有没有更好的办法,比如的通过设置什么参数不让它出现呢。还有这个黄条也不是所有电脑都出现,如何添加判断呢?
sleep(300)
ControlClick ( WinGetTitle("") , "","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
代码和网页都在附件里有!

tjztbk 发表于 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">&nbsp;</td>
</tr>
</table></td>
    </tr>
</table>
<br>
<table width="999" border="0" cellspacing="0" cellpadding="3">
    <tr>
      <td bgcolor="#F5F5F5">&nbsp;</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>&nbsp;</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=new Array()
group=new Option("--请选择--","9999")
group=new Option("综合","1")
    group=new Option("工作","2")
        group=new Option("信息化","3")
        group=new Option("其他","4")
group=new Option("教育培训","5")
    group=new Option("人事工作","6")
    group=new Option("组织纪律","7")
    group=new Option("其他","8")
group=new Option("后勤保障","9")
var temp=document.form1.stage2
function redirect(x){
for (m=temp.options.length-1;m>0;m--)
temp.options=null
for (i=0;i<group.length;i++){
temp.options=new Option(group.text,group.value)
}
temp.options.selected=true
}
function go(){
location=temp.options.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>

komaau3 发表于 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

tjztbk 发表于 2012-10-24 00:02:39

非常感谢“komaau3 ”的回复,问题基本解决了!

不过一开始“komaau3 ”的回复中,第13行代码中的变量“$oQuery2_2”写成“$oQuery2_1”,所以一开始调试多次子类无法正确选择,呵呵!

tjztbk 发表于 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(""), "", "Button1","IsVisible", "") Then ;这里通过实现按钮判断IE是否弹出安全信息栏(黄条),并通过模拟鼠标键盘完成操作(容许阻止的内容),暂时想不到更好的办法!
        ControlClick ( WinGetTitle("") , "","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

godsky 发表于 2014-6-19 10:36:39

mark 好难找啊 之前看过见天用竟然差点找不到

godsky 发表于 2014-6-19 10:36:42

mark 好难找啊 之前看过见天用竟然差点找不到
页: [1]
查看完整版本: 【已解决】关于关闭网页安全提示框的方法和无法填写部分表单的问题