aardio 官方社区

 找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
查看: 135109|回复: 61

网页自动填表自动登录自动点击模拟代码汇总

 火... [复制链接]

52

主题

1270

回帖

7276

积分

荣誉会员

积分
7276
发表于 2010-12-1 20:18:20 | 显示全部楼层 |阅读模式
一、创建简单的WEB窗口(winform)
1.1点击新建WEB窗体即可创建WEB浏览器,默认代码如下:

//创建web窗体
var wb = web.form( winform

,//可输入_UIFLAG_ 前缀的常量自定义外观

,//可输入_DLCTL_ 前缀的常量以控制下载行为

,//"USER AGENT"

);

第二个参数可以使用一个或多个_UIFLAG_ 前缀的常量自定义外观,多个常量之间用位或操作符( | ) 连接.
第三个参数可使用_DLCTL_前缀的常量以控制下载行为,多个常量之间用位或操作符( | ) 连接.

第四个参数USER AGENT(新版新添加还没知道用法请老大指导)

较常用第三个参数,控制下载行为,具体参数可参考帮助文档

常用有
_DLCTL_DOWNLOADONLY下载图片,但不显示
_DLCTL_NO_FRAMEDOWNLOAD web窗体对包含框架的页面进行语法分析但不下载任何帧, 同时忽略框架,
_DLCTL_RESYNCHRONIZE 忽略缓存中的数据并向服务器请求更新
_DLCTL_SILENT 组件对话框、脚本错误对话框静默模式
_DLCTL_NOFRAMES 禁止框架

1.2常用WEB窗体特殊设置
1).  禁止所有脚本错误对话框,并使脚本继续运行。 与wb.silent不同,wb.noScriptErr仅对脚本错误对话框起作用,并且不会阻止脚本执行.
wb.noScriptErr = true

2.)不显示网页JS弹出的【确定】窗口
wb.showMsg=function( 提示信息, 对话框标题 ){
    return false;/*返回false则不显示对话框*/
}

如想显示【确定】窗口并自动点击后消失则如下:
wb.showMsg=function(text/*信息*/,caption/*标题*/){

        closeDlg_t = function(title) {
                import winex;
        
                //查找符合标题的对话框
                var hwnd;
                do{
                        hwnd = winex.find("#32770"/*标准对话框类名*/,title )
                        sleep(100)
                }while( !hwnd )
               
                //查找对话框上的第一个按钮
                var hbuttton = winex.findEx(hwnd,1,"Button");
                winex.click(hbuttton);
               
        }
        thread.create(closeDlg_t,caption/*传递参数给线程*/ )
        
        
        return true; /*返回false则不显示对话框*/
}

(更多资料详见帮助WEB窗体事件说明)


1.3 WEB窗体最大化、最小化

//点击最大化,但是这个函数如果发现最大化会还原窗口,并返回一个值表示当前是否最大化
winform.hitmax()

//点击最小化按钮
winform.hitmin()

//这个是最大化,并且显示,多了一个显示的步骤
winform.show(0x3/*_SW_MAXIMIZE*/)

//这个是最小化,并显示
winform.show(0x6/*_SW_MINIMIZE*/)

1.4禁止点击链接在新窗口打开
A
//在wb.wait()后 添加下面代码,在所属的窗口禁止弹出
for(k,ele in wb.eachLinks()){
   
    ele.target = "_self"
}

B 写在事件里,这样每次打开页面就自动修改,不需要写在wb.wait后面了.全局开始禁止弹出窗口
wb.DocumentComplete=function( pDisp, url) {
    /*当整个文档完成时触发,刷新页面不触发*/
  for(k,ele in wb.eachLinks()){
  ele.target = "_self"
  }
}

//打开目标网站
wb.go("http://www.aardio.com/")

C
//打开一个网址
wb.go(网址,自定义http请求头,目标窗口="_self")

D
wb.NewWindow2=function( ppDisp, Cancel) {
   
/*弹出新窗口以前触发 */
   
owner.go( owner.translateUrl )
   
return ppDisp, true; /*第二个返回值如果为真,则取消新窗口*/  
}


E
wb.translate = function( url ){
   
/*解析URL时触发 */
   
owner.translateUrl = url;
}



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

如:在static控件显示WEB窗体浏览
//创建web窗体
var wb = web.form( winform.static //这是winform窗体上的一个静态文本框控件
    ,0x4/*_UIFLAG_NO3DBORDER*/ | 0x8/*_UIFLAG_SCROLL_NO*/  //禁用边框,禁用滚动条
    ,0x10/*_DLCTL_DLIMAGES*/ | 0x40000000/*_DLCTL_SILENT*/  //允许下载图片,但是禁用组件对话框、脚本错误对话框等
    ,//"USER AGENT"
    );

还可添加多控件显示多个WEB网页




二、自动填表、自动登录(提交)代码
2.1 自动填表(有NAME或ID)
A 简单 ,没框架,只有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() 则实现等待该节点下载并返回该节点的功能,而无须等待整个网页下载完*/

B 多个属性名相同
tele = wb.getEles( HTML节点的name属性, 框架名 )
tele(0).setAttribute("属性名字", "修改第一个节点属性值")

该函数返回网页上所有name属性相同的同名节点.返回值为一个com数组.注意com数组使用()括号读取成员而不是使用索引操作符[]
可以通过第二个参数指定框架窗口,该参数可以省略.


2.2 自动登录或提交表单
ele.form.submit()//自动提交表单

2.3 特殊形式提交(无NAME无ID)
采用wb.eachAll 遍历方法查找节点,并使用ele.click()模拟点击
//遍历所有input节点
for( i,ele in wb.eachAll("input") ){
   
if( ele.属性 == "_"//当找到所属的属性恒等于一个“点击链接的值” )  
        ele.click();
//然后点击
}

遇到特殊形式,采用遍历查找是最简单的方法。

更多的自动登录示例可查看旧论坛的帖子,里面汇总了各种形式的登录示范,还有POST登录方法。
163邮箱登录问题(carl版主指导163填表及登录)
登录问题(帖子有老大指导多种方法自动登录)

aardio 网页操作专题视频(lujjh超版制作的经典视频教程)
取得指定网页节点的方法归纳 (模拟点击必须掌握的知识)

2.4 自动点击网页超链接

也采用遍历查找超链接,然后自动点击,老大教我们封装了一个点击超链接函数clickLink()


clickLink = function(title){//给函数一个连接名参数
    for(k,ele in wb.eachLinks() ){//遍历所有超链接
        if(string.find(ele.innerHTML,title )){//如果发现超链接名
          ele.click();//自动点击
          break;
      }
  }
}

//当链接名为A,则执行点击
clickLink("A")






评分

参与人数 2 +15 收起 理由
今禾 + 5 很给力!
stillywud + 10 赞一个!

查看全部评分

10

主题

161

回帖

1005

积分

四级会员

男人,表里如一

积分
1005
QQ
发表于 2010-12-1 20:22:03 | 显示全部楼层
回复 qqmmcc 的帖子

顶上去让更多想学WEB的朋友看到,这些基础知识很重要,不愿意看帮助的朋友就直接来看这个汇总的技巧帖吧。

117

主题

1103

回帖

6572

积分

六级会员

积分
6572
发表于 2010-12-2 21:28:18 | 显示全部楼层
很精辟......

4

主题

48

回帖

288

积分

荣誉会员

积分
288
QQ
发表于 2010-12-3 11:01:24 | 显示全部楼层
提炼的挺好,支持这种整理~

56

主题

412

回帖

3788

积分

荣誉会员

积分
3788
发表于 2010-12-3 11:06:59 | 显示全部楼层
QQMMCC 整理的太棒了

117

主题

1103

回帖

6572

积分

六级会员

积分
6572
发表于 2010-12-3 22:28:44 | 显示全部楼层
回复 baoliyafeng 的帖子

有的安全控件 就是看不到

1

主题

15

回帖

357

积分

荣誉会员

积分
357
发表于 2010-12-6 14:00:16 | 显示全部楼层
很有用,谢谢整理分享

6

主题

150

回帖

925

积分

三级会员

积分
925
发表于 2010-12-17 00:24:23 | 显示全部楼层
学习了。谢谢分享!

0

主题

3

回帖

28

积分

新手入门

积分
28
发表于 2010-12-21 20:38:28 | 显示全部楼层
学习了,谢谢

0

主题

1

回帖

14

积分

新手入门

积分
14
发表于 2011-1-25 14:47:06 | 显示全部楼层
好东西,正在学习

1

主题

36

回帖

194

积分

一级会员

积分
194
发表于 2011-2-10 18:42:18 | 显示全部楼层
好东西,刚才试着自己弄了个百度贴吧登录的代码如下,因为button没有名字和iD,只好在password处模拟回车。

import win.ui;
import web.form;
import win
import key
import inet.http;
var formEncode = inet.url.encode;

/*DSG{{*/
var winform = win.form( bottom=249;scroll=1;right=349;text="aardio Form" )
winform.hitmax()
winform.add(  )
/*}}mpo*/

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

//打开目标网站
wb.go("http://tieba.baidu.com/")
//显示窗体
winform.show(true)
wb.wait(
"");//等待指定网址,可以使用模式匹配语法

//创建external接口
//可以通过javascript脚本访问external接口的所有成员
wb.external = {
    func =
function( arg )begin
        console.log(
"我被网页上的脚本调用了",arg)
   
end
}
//在网页上执行javascript脚本
wb.doScript("
    external.func(123);
    "
)
   
wb.getEle(
"PassInputUsername0").value="aardiotest"
wb.getEle(
"PassInputPassword0").value="aardio123"
//不知道怎么点击登录按钮,因为那个按钮没有名字,所以就这样——在密码框上回车
wb.getEle("PassInputPassword0").focus()
//不知道为什么,小窗体回车时没有反应,所以用了winform.hitmax()
win.delay(1000)
key.press(key.VK.ENTER)
//进入消息循环
win.loopMessage();
return winform,wb;


点评

工具有网页探针,很好用,探针可以探测  发表于 2011-2-10 19:43

1

主题

36

回帖

194

积分

一级会员

积分
194
发表于 2011-2-10 20:04:49 | 显示全部楼层
回复 qqmmcc 的帖子

我是一个个弄的,看那个视频后自己想的。网页探针试试看。想弄个115的自动续期。老大过去那个代码看不懂,好像失效了,不能续期。。。

7

主题

115

回帖

747

积分

三级会员

积分
747
QQ
发表于 2011-5-2 06:07:51 | 显示全部楼层
标记一下,以后慢慢看

6

主题

14

回帖

107

积分

一级会员

积分
107
发表于 2011-5-22 19:56:36 | 显示全部楼层
11楼的 key.press(key.VK.ENTER) 语句帮我解决了问题。
我正在搞一个自动注册网易通行证的程序,不知怎么搞的,执行 ele.click(); ele.fireEvent("onfocus"); 都看不见输入框的光标,是上面的语句解决了问题。不过,问题是解决了,但为什么会产生这种情况没搞明白。知道的不吝指教一下。

6

主题

14

回帖

107

积分

一级会员

积分
107
发表于 2011-5-22 20:41:15 | 显示全部楼层
ele.click();ele.focus(); ele.fireEvent("onfocus");  三条语句连用,已经ok了。

40

主题

519

回帖

3015

积分

新手入门

超级初学者

积分
3015
发表于 2011-5-24 19:53:06 | 显示全部楼层
入门必看,准备学web了,Q版整理的很好,看后有不小的收获

0

主题

18

回帖

100

积分

一级会员

积分
100
发表于 2011-5-26 10:43:37 | 显示全部楼层
这个收集整理的很有用

2

主题

21

回帖

120

积分

一级会员

积分
120
发表于 2011-6-29 17:59:22 | 显示全部楼层
好贴,支持你!

48

主题

542

回帖

3328

积分

五级会员

积分
3328
发表于 2011-7-2 18:45:02 | 显示全部楼层
不错这种总结贴非常好,方便查找,再总结一些倒机时执行,随机执行时间的最好

点评

这些不需要总结了 自己掌握一定知识都可以写出来了 手册有的  发表于 2011-7-2 18:50
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

手机版|未经许可严禁引用或转载本站文章|aardio.com|aardio 官方社区 ( 皖ICP备09012014号 )

GMT+8, 2025-2-13 06:49 , Processed in 0.069734 second(s), 26 queries .

Powered by Discuz! X3.5

Copyright © 2001-2024 Tencent Cloud.

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