Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4737095
  • 博文数量: 206
  • 博客积分: 5240
  • 博客等级: 大校
  • 技术积分: 3224
  • 用 户 组: 普通用户
  • 注册时间: 2010-08-12 21:40
文章分类

全部博文(206)

文章存档

2013年(13)

2012年(8)

2011年(33)

2010年(152)

我的朋友

分类:

2010-08-29 00:55:47

一、创建简单的WEB窗口(winform)

web.form是一个类,其构造函数可以在现有窗口对象中插入浏览器控件.
窗口对象可以是一个win.form对象,也可以是窗体上的控件,例如static控件.

现版默认代码:

//创建web窗体
var wb = web.form( winform
    ,//可输入_UIFLAG_ 前缀的常量自定义外观
    ,//可输入_DLCTL_ 前缀的常量以控制下载行为
    );


第二个参数可以使用一个或多个_UIFLAG_ 前缀的常量自定义外观,多个常量之间用位或操作符( | ) 连接.
第三个参数可使用_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 内所有的子控件。
阅读(12176) | 评论(0) | 转发(2) |
给主人留下些什么吧!~~