分享

autoit3 IE.au3的介绍以及应用教程

 温柔一哮 2011-03-23
autoit3 IE.au3的介绍以及应用教程 [转]

第一讲,介绍一下基本的东西

如何打开一个网页(太简单,加点要求)

1.打开百度,http://www.baidu.com , 在百度搜索里面输入”与 autoit3 亲密接触”,偶的blog;
2.窗口我要”800*600”,隐藏工具栏,而且大小不可更改;
3.偏执一点,不喜欢”百度一下,你就知道”,那我们改一下”我的百度,我做主”
4.状态栏里面显示信息”欢迎访问 与 autoit3 亲密接触 hi.baidu.com/iokey
5.我不想看到整个过程,我只想看到结果,OK没问题.

首先我们打开一个浏览器,输入百度的网址,这里要用到_IECreate,这个函数的返回值是指向这个ie窗口的目标变量,参数” 0,1,1,0”,分别的意思是:不找已经存在的www.baidu.com的 ie窗口,显示ie,等待网页载入完全然后返回,激活此ie窗口
#include <IE.au3>
$oIE = _IECreate ("
www.baidu.com",0,1,1,0)

接下来我们对这个窗口进行一番设置,这里要用到_IEPropertySet,这个函数用来设置浏览器或者DOM元素的

_IEPropertySet ($oIE, "toolbar", 0) ;隐藏toolbar
_IEPropertySet ($oIE, "width", 800) ;设置ie宽800像素
_IEPropertySet ($oIE, "height", 600) ;设置ie高600像素
_IEPropertySet ($oIE, "resizable", 0) ;设置ie不可以调整大小
_IEPropertySet ($oIE, "title","我打开的百度,我做主") ;设置ie标题,取代原title
_IEPropertySet ($oIE, "statustext","欢迎访问 与 autoit3 亲密接触 hi.baidu.com/iokey") ;设置状态栏

设置完毕,我想在搜索框里面写入搜索内容,这里说明一点,当窗口显示的时候我们可以用send()/sendx()来发送,但是这样会遇到一个常见 的问题,可能窗口不是激活状态,因为ie窗口里面的内容不是标准的空间,所以GUICtrlSetData失效了.不过对ie.au3有更好的方法,下面 来看:

$oForm = _IEFormGetObjByName ($oIE, "f")
$oQuery1 = _IEFormElementGetObjByName ($oForm, "wd")
_IEFormElementSetValue ($oQuery1, "与 autoit3 亲密接触")

上面三句,分别是找到name为”f”的表单,在这个表单里面找到name为”wd”的表单元素,这里的wd代表的就是搜索框,最后将wd的内容设 置为"与 autoit3 亲密接触"

这里还有朋友要问,能不能自动点击搜索按钮呢?当然可以的,而且我们还不是通过简单的send()回车键来实现,
_IEFormSubmit ($oForm,0)
这句就是提交$oForm表单, 0代表不等待网页载入完成立即返回.

这样还不够,那我们再玩点花样,目标是先让ie隐藏,设置啊,输入搜索串都是在隐藏状态下完成,显示出来的时候什么都完成了,首先我们让ie打开的 时候就是隐藏状态,
$oIE = _IECreate ("www.baidu.com",0,0,1,0)
然后在适当的时候,我们让她显示出来,这里我们用到_IEAction(),这个函数模拟了我们对浏览器的大部分操作,如刷新,后退,退出等等,这里是让 ie显示的,当然也有隐藏的功能.
_IEAction ($oIE, "visible")


总结一下,这里我们用到了几个函数;_IEPropertySet;_IECreate;_IEAction 这些都是和浏览器属性相关的,有着众多的参数可以来利用,基本上可以满足对浏览器的操作.这里大家可能要提出一些疑问,在输入百度搜索内容的时候提到 的"f" "wd",是从哪里来的?

这个就留在下一讲,将详细的讲述一下如何填写表单.
本次的完全代码:

#include <IE.au3>
$oIE = _IECreate ("www.baidu.com",0,0,1,0);打开一个ie,输入百度网址
_IEPropertySet ($oIE, "toolbar", 0)
_IEPropertySet ($oIE, "width", 800)
_IEPropertySet ($oIE, "height", 600)
_IEPropertySet ($oIE, "resizable", 0)
_IEPropertySet ($oIE, "title","我打开的百度,我做 主")
_IEPropertySet ($oIE, "statustext","欢迎访问 与 autoit3 亲密接触 hi.baidu.com/iokey")
$oForm = _IEFormGetObjByName ($oIE, "f")
$oQuery1 = _IEFormElementGetObjByName ($oForm, "wd")
_IEFormElementSetValue ($oQuery1, "与 autoit3 亲密接触")
_IEFormSubmit ($oForm,1)
_IEAction ($oIE, "visible")
Sleep(5000)
MsgBox(0,"提醒","确定退出IE")
_IEAction ($oIE, "quit")

第二讲,我们开始讨论如何填写表单

第一步,先简单说一下HTML表单(Form).
HTML表单(Form)是HTML的一个重要部分,主要用于采集和提交用户输入的信息。

HTML表单(Form)常用控件有:
input type="text" 单行文本输入框,可以用来输入用户名
input type="password" 密码输入框(输入的文字用*表示)
input type="submit" 将表单(Form)里的信息提交给表单里action所指向的文件,一般我们从网页上看到的就是确定/发表等等
input type="checkbox" 复选框
input type="radio" 单选框
select 下拉框
textArea 多行文本输入框

第二步,我们如何找到一个网页的表单和表单内的控 件.
下面我们结合mail.163.com来讲解如何自动填 写
这个就是登录时候我们要操作的几个部分:分类如下
1,用户名   
2,密      码  
3,版      本 默   认/极速 3.0 /简   约  
4,记住用户名/增强安全性  
5,登录邮箱/登录网盘


这个五部分就是163mail里面的表单控件,这里我们先要看一下下面两个函数
_IEFormGetCollection 返回代表文档内表单的目标变量的集合,同时@EXTENDED记录了表单的数量
_IEFormElementGetCollection返回代表指定表单内所有控件的目标变量的集合,同时@EXTENDED记录了该表单内控件的数量
好的,知道了上面两个函数的简单描述,我们可以写出:
#include <IE.au3>
$oIE = _IECreate ("
http://mail.163.com")
$oForms = _IEFormGetCollection ($oIE)

MsgBox(0, "表单信息", "这个页面上共有" & @extended & "个表单")
这里还要提到一个关键字"For...In...Next "这个关键字thesnow没有汉化,我就罗嗦几句,
For <$Variable> In <expression>
        statements
        ...
Next

<$Variable> 是一个变量,不必事先声明
<expression>是一个数组或者变量合集(至少包含一个元素)
作用是列举<expression>的所有元素.

为什么要提到这个呢?
因为_IEFormGetCollection ($oIE)返回的是个合集,$oQuerys = _IEFormElementGetCollection ($oForms)这样是错误的,
而正确的方法是:
For $Form In $oForms
        MsgBox(0, "表单名称", $oForm.name)
Next

这里的$Form是随意定义的变量,可以是任意的变量,对于表单内的控件也可以同理得到寻找方法,
完整的查看表单的方法就出来了,

#include <IE.au3>
$oIE = _IECreate ("http://mail.163.com")
$oForms = _IEFormGetCollection ($oIE)
MsgBox(0, "表单信息", "这个页面上共有" & @extended & "个表单")
For $Form In $oForms
MsgBox(0, "表单名称", $Form.name)
$oQuerys = _IEFormElementGetCollection ($Form)
For $Query In $oQuerys
MsgBox(0, "表单控件信息", "名称:"&$Query.name & " 类型:"&$Query.type)
Next
Next

这里只是找到了这些表单/控件,有时还是难分辨具体对于网页上是哪部分,有HTML基础的朋友可以看网页的源文件,核对, 无基础的朋友建议借助Dreamweaver来看,不是很难.

第三步,我们来让autoit3填写这个表单,
先说一下思路,因为我们已经可以通过上面的方法找到相关的资料,可以得到如下信息:
表单:一个 名称是login163
1,用户名       : username 类型是text
2,密      码      :passward 类型是passward
3,版      本 默   认/极速 3.0 /简   约      : selType 类型是 select-one
4,记住用户名/增强安全性      : remuser 类型是 checkbox      / secure 类型是 checkbox
5,登录邮箱/登录网盘 : 登录邮箱 类型是 submit / 登录网盘      类型是 submit

下面我们用到的几个函数
_IEFormGetObjByName      返回一个表单的变量,这个变量指向指定名称的表单
_IEFormElementGetObjByName 返回一个控件的变量,这个变量指向指定表单和名称的控件
_IEFormElementSetValue 设定表单控件的值


接下来我们先试一下,将邮箱的用户名写上去:
#include <IE.au3>
$oIE = _IECreate ("
http://mail.163.com")
$oForm = _IEFormGetObjByName ($oIE, "login163")
$oQuery = _IEFormElementGetObjByName ($oForm, "username")
_IEFormElementSetValue ($oQuery, "AutoIt IE.au3")

同样的方法,写入密码:
$oQuery = _IEFormElementGetObjByName ($oForm, "password")
_IEFormElementSetValue ($oQuery, "AutoIt IE.au3")

下面是"版本"的选择了,这要用到下面这个函数:
_IEFormElementOptionSelect 设置 "Select Option"类的表单控件值,具体见帮助.
$oQuery = _IEFormElementGetObjByName ($oForm, "selType")
_IEFormElementOptionSelect ($oQuery , 1, 1, "byIndex")

对应"记住用户名/增强安全性"这两个checkbox我们取消check状态,需要下面的函数:
_IEFormElementCheckBoxSelect 可以设置"checkbox"类的表单控件值,具体见帮助
_IEFormElementCheckboxSelect ($oForm, 0, "", 0, "byIndex")
_IEFormElementCheckboxSelect ($oForm, 1, "", 0, "byIndex")
  

最后我们还剩下"登录邮箱/登录网盘"这两个选项了,
这里上一章节用来提交表单的函数_IEFormSubmit 使用不了,为什么?"there is often custom JavaScript tied to an onClick event for its Submit button"帮助里面的.
所以我们要用到_IEAction()也是上一章节提到的,我们通过名称找到对应这个控件

的变量,然后模拟一个click在这个变量上,方法如下:
$oQuery = _IEFormElementGetObjByName ($oForm, "登录邮箱")
_IEAction($oQuery ,"click")

同样登录网盘就是下面的方法:
$oQuery = _IEFormElementGetObjByName ($oForm, "登录网盘")
_IEAction($oQuery ,"click")


终于写完了,我想综合一/二两讲,添加一些GUI方面的东西,大家可以写出一个不错的163邮件登录的工具,甚至做出一个多邮箱登录软件
总结:
这一讲包括的函数:
IEFormElementCheckboxSelect
_IEFormGetObjByName  
_IEFormElementGetCollection
_IEFormElementGetObjByName
_IEFormElementOptionSelect
_IEFormElementSetValue

下面这两个是类似的函数,大家看看帮助就明白了.
_IEFormElementGetValue
_IEFormElementRadioSelect

本次代码:

#include <IE.au3>
$oIE = _IECreate ("http://mail.163.com",0,0,1,0)
_IEPropertySet ($oIE, "toolbar", 0)
_IEPropertySet ($oIE, "width", 600)
_IEPropertySet ($oIE, "height", 600)
_IEPropertySet ($oIE, "resizable", 0)
$oForm = _IEFormGetObjByName ($oIE, "login163")
$oQuery = _IEFormElementGetObjByName ($oForm, "username")
_IEFormElementSetValue ($oQuery, "AutoIt IE.au3")
$oQuery = _IEFormElementGetObjByName ($oForm, "password")
_IEFormElementSetValue ($oQuery, "AutoIt IE.au3")
$oQuery = _IEFormElementGetObjByName ($oForm, "selType")
_IEFormElementOptionSelect ($oQuery , 1, 1, "byIndex")
_IEFormElementCheckboxSelect ($oForm, 0, "", 0, "byIndex")
_IEFormElementCheckboxSelect ($oForm, 1, "", 0, "byIndex")
$oQuery = _IEFormElementGetObjByName ($oForm, "登录邮箱")
_IEAction($oQuery ,"click")
sleep(2000)
_IEAction ($oIE, "visible")

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多