一、创建简单的WEB窗口(winform)
web.form是一个类,其构造函数可以在现有窗口对象中插入浏览器控件.
窗口对象可以是一个win.form对象,也可以是窗体上的控件,例如static控件.
现版默认代码:
//创建web窗体
var wb = web.form( winform
,//可输入_UIFLAG_ 前缀的常量自定义外观
,//可输入_DLCTL_ 前缀的常量以控制下载行为
);
|
第二个参数可以使用一个或多个自定义外观,多个常量之间用位或操作符( | )
连接.
第三个参数可使用_DLCTL_前缀的常量以控制下载行为,多个常量之间用位或操作符( | ) 连接.
具体参数参阅帮助
旧版默认代码:
//创建web窗体
var wb = web.form(winform.static,web/*无边框*/ /*,web.DLCTL_NO_SCRIPTS禁用脚本*/ )
|
//创建web窗体(没最大小化按钮)
wb = web.form(webform)
|
例:在static控件显示WEB窗体浏览
//创建web窗体
var wb = web.form( winform.static //这是winform窗体上的一个静态文本框控件
,0x4/*_UIFLAG_NO3DBORDER*/ | 0x8/*_UIFLAG_SCROLL_NO*/ //禁用边框,禁用滚动条
,0x10/*_DLCTL_DLIMAGES*/ | 0x40000000/*_DLCTL_SILENT*/ //允许下载图片,但是禁用组件对话框、脚本错误对话框等
);
|
*让自己的程序窗口最大化最小化,其他程序可加上窗口句柄。
::ShowWindow(winform.hwnd,0x3/*_SW_MAXIMIZE*/)//最大化
::ShowWindow(winform.hwnd,0x6/*_SW_MINIMIZE*/)//最小化
*禁止点击链接在新窗口打开
//在wb.wait()后 添加下面代码,在所属的窗口禁止弹出
for(k,ele in wb.eachLinks()){
ele.target = "_self"
}
写在事件里,这样每次打开页面就自动修改,不需要写在wb.wait后面了.全局开始禁止弹出窗口
wb.DocumentComplete=function( pDisp, url) { /*当整个文档完成时触发,刷新页面不触发*/ for(k,ele in wb.eachLinks()){ ele.target = "_self" } }
//打开目标网站 wb.go("")
|
//打开一个网址 wb.go(网址,自定义http请求头,目标窗口="_self")
|
二、自动登录(模拟登陆)
1.自动填表
(1)简单,没框架
/*寻找所属节点的属性,然后输入新的属性值
当知道属性ID或NAME时可采用下面语句*/
ele=wb.waitEle("_"//双引号里填属性ID或name)
ele.value = _//修改属性默认值;
ele.fireEvent("_"//当有事件执行函数时需事件发生器,如onchange onsubit)
说明:
ele = wb.getEle( HTML节点的ID名name, 框架名 ) 调用wb.getEle之前必须调用 wb.wait() 等待网页下载完毕. 而使用 wb.waitEle() 则实现等待该节点下载并返回该节点的功能,而无须等待整个网页下载完. |
(2)
tele = wb.getEles( HTML节点的name属性, 框架名 ) tele(1).setAttribute("属性名字", "修改第一个节点属性值") |
该函数返回网页上所有name属性相同的同名节点.返回值为一个com数组.注意com数组使用()括号读取成员而不是使用索引操作符[]
可以通过第二个参数指定框架窗口,该参数可以省略.
3.自动点击及提交表单
ele.form.submit()//自动提交表单
或
for(k,ele in wb.eachAll( "button") ){
ele.click();
};
|
备注:其实按钮有3种类型,
一种是 submit(提交按钮),点击这种按钮一般只需要提交其所在表单;
第二种是 button(普通按钮),这种按钮一般都有 onclick 事件,直接执行里面的事件即可(如一个按钮 onclick="refresh()",只要去执行 refresh() 就可以了);
还有一种按钮是 reset(重置按钮),同样可以调用其所在表单的 reset() 函数。
关于节点的查找一般有这些方式:
1、有id型。id一般是一个网页控件独一无二的标志,一个id唯一对应一个控件。对于有id的控件,一般用 getElementById 来获取该控件,如:getElementById("mybutton"),也就是快手中的 getEle 吧。
2、有name型。name可以被重复,也就是说两个控件的name可能相同,这个时候可以用 getElementsByName 来获取该控件,如:getElementsByName("mybutton"),getElementsByName返回的是一个集合,也就是说所有name为mybutton的控件的集合。这个时候我们可以通过数组方式来访问每一个控件,如 getElementsByName("mybutton")(0) 是第一个,(1)是第二个,以此类推。在快手中,getEle 中如果填写的是name,则默认返回第一个(索引为0)的控件。快手可以用eachAll("_"//节点标签)
3、无id、无name型。这种比较麻烦,有很多方式来获取。首先,标签名(如 a、div、span、li)比较唯一的可以用 getElementsByTagName 获取,如:getElementsByTagName("li"),将返回li的所有集合,同样用数组方式访问。其次与某有id或有name属性的控件有父子关系的,也可以用 childNodes、parentElement 获取,如 getElementById("submit").parentElement 可以获取到 submit 按钮所在的 form(或 div、label),getElementById("formID").childNodes 可以获取到指定 form 内所有的子控件。
阅读(12231) | 评论(0) | 转发(2) |