wuxue107 发表于 2014-6-25 23:36:19

写一个js实现的,WEB自动化、数据采集、同大家分享

思路:js创建个InternetExplorer.Application对象,将DocumentComplete事件绑到一个function,在这个function里将额外的本地jQuery(jQuery名称在脚本里已全部替换为Nop)加载到Document里。
并将常用的window、document、Script、$(JQuery)导出到脚本里。这样就可以像前端开发一样可以使用jQuery去操作Dom了,也可以用ajax去采集数据了。之前是用vbs写的,最后用js,是因为js可以很好融合到jQuery。


目录里有如下几个文件
│Test2.js       ---脚本主要在这里面些
│1.xlsx         ---存放采集到的数据
├─Lib
│      DataLib.js--- 数据处理,包含几json2csv、json2xml、xml2csv、xml2json等函数
│      ExcelLib.js--- DataLib扩展,处理Excel
│      IELib.js   ---绑定DocumentComplete,变量导出
│      jquery.alerts.js---在脚本运行中提供用户交互
│      nop-1.8.0.js---修改名称后的jQuery1.8.0

其中Test2.js就是一个Demo,就是一个采集例子,双击运行或cscript Test2.js运行test2.js,输入打开一个网站,输入提示的验证码,就会对采集的数据录入到Excel中

if(WScript.FullName.substr(WScript.FullName.length-11,11) != 'cscript.exe'){
        WScript.CreateObject("Wscript.Shell").Run('cscript //e:javascript "' + WScript.ScriptFullName + '"');
        WScript.Quit();
}

scriptpath = WScript.ScriptFullName.substring(0,WScript.ScriptFullName.lastIndexOf("\\"));
function include(f){
        var p = "";
        if(f.indexOf(":")!=1) p = scriptpath + "\\Lib\\";
        eval(WScript.CreateObject("Scripting.FileSystemObject").OpenTextFile(p + f).ReadAll());
}

//#################### 以上固定无需修改。########################

var username = "minyihua";
var password = "baggio919871020";

include("IELib.js");
InitWebBower("http://chuanbo.weiboyi.com/");
doLoopEvents(); // 代码执行到此处将进入事件循环,不在向下执行;


// ###############################################################
function loadComplete(URL){

        if(/baidu/.test(URL)){
                print('百度');
        }else if( PageNo == 10 ){
                print('第10个页面处理');
        }else if("http://chuanbo.weiboyi.com/" == URL ){
                $("#tonggao_qd").click();
                $("#username").attr("value",username);
                $("#password").attr("value",password);
                print(window.ss);
                InputBox("输入验证码:",function(v){
                        if(null != v){
                                $("#piccode").attr("value",v);
                                $("#login-submit").click();
                        }
                });
        }else if("http://chuanbo.weiboyi.com/hwreservation/account" == URL){
                var tkv = $("#web_csrf_token").val();
                var n;
                var url;
                //include("DataLib.js");
                include("ExcelLib.js");
                var rline = 2;
                DataLib.initExcel('1.xlsx');
                for (n=0;n<90 ;n++)
                {
                        url = '/hwreservation/account/list/requirement_id/?web_csrf_token=' + tkv + '&start=' + n*100 + '&limit=100';
                        $.ajaxSetup({async: false});
                        getJson(url,function(data){
                                DataLib.json2range(data.data.list,['weibo_name','url','followers_count','external_tweet_price','location','audience_gender','hand_tags','professions','reservation_notice','cooperation_index','posts_avgretweet_count','posts_avgcomment_count'],'A'+(n*100+rline) );
                        });       
                        print('采集数据:' + ((n+1)*100) + '条 ... ');
                }
                isComplete = true;//将此全局变量设置为true后将会退出脚本
        }else{
                //ie.document.Script.execScript("var hhh = {t:5};var backfunc = function(f){f(hhh);}");
                //window.backfunc(function(v){
                //        WScript.Echo(v.t);
                //});
        }

}

赵佳乐SMILE 发表于 2014-6-26 10:44:44

高大上

wuxue107 发表于 2014-6-26 10:55:35

使用中发现VBSEDIT可以调试js代码,顿时很爽。

黑羽祭 发表于 2014-6-26 16:13:20

顶~~~~
页: [1]
查看完整版本: 写一个js实现的,WEB自动化、数据采集、同大家分享