phantomjs 抓天下三藏宝阁数据

var page = require('webpage').create();
page.viewportSize = {width: 1200,height: 1500};
page.settings.userAgent='Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:48.0) Gecko/20100101 Firefox/48.0';

var webSite='https://tx3.cbg.163.com/cgi-bin/equipquery.py?act=show_overall_search';

/*
    加载外部js,不过好像加载了就会和网页里的有冲突
    page.includeJs(
        'https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js',
        function() {

            waitFor(function() {
                        return page.evaluate(function() {
                                        return $("#pager").children('a').length>3;
                        });
                    }, function() {
                       console.log("content has been load");
                             page.render("output.png");
                       phantom.exit();
                    },10000);
        }
    );
*/

//死等,会把资源抢尽,不建议
function sleep(n) {
    var start = new Date().getTime();
    while (true) {
        if (new Date().getTime() - start > n) {
            break;
        }
    }
}

//等待某个目标达成后去执行某个程序
"use strict";
function waitFor(testFx, onReady, timeOutMillis) {
    var maxtimeOutMillis = timeOutMillis ? timeOutMillis : 3000, //< Default Max Timout is 3s
        start = new Date().getTime(),
        condition = false,
        interval = setInterval(function() {
            if ( (new Date().getTime() - start < maxtimeOutMillis) && !condition ) {
                // If not time-out yet and condition not yet fulfilled
                condition = (typeof(testFx) === "string" ? eval(testFx) : testFx()); //< defensive code
            } else {
                if(!condition) {
                    // If condition still not fulfilled (timeout but condition is 'false')
                    console.log("'waitFor()' timeout");
                                        page.render("timeout.png");
                    phantom.exit(1);
                } else {
                    // Condition fulfilled (timeout and/or condition is 'true')
                    console.log("'waitFor()' finished in " + (new Date().getTime() - start) + "ms.");
                    typeof(onReady) === "string" ? eval(onReady) : onReady(); //< Do what it's supposed to do once the condition is fulfilled
                    clearInterval(interval); //< Stop this interval
                }
            }
        }, 500); //< repeat check every 250ms
};

function isCbgLoadSuss(){
    return page.evaluate(function() {
        return document.getElementById("pager").childElementCount>1;
        });
}
function makeAScreen(name){
    console.log("make a screenShot "+ name);
    page.render(name+".png");
}

function changeAttr(type,attr)
{
    page.evaluate(function(type,attr){
        switch(type)
        {
            case 1:
                document.getElementsByName("equ_xiuwei_min")[0].value=attr;
                break;
            case 2:
                document.getElementsByName("equ_xiuwei_max")[0].value=attr;
                break;
        }
    },type,attr);
}

page.onLoadFinished = function(status){
    var script1="function(){search();}";
    var script2="function(){search_role_price_down();}";
    var script3="function(){search_role_price_up();}";


    console.log("onLoadFinished");
    changeAttr(1,85000);
    page.evaluateJavaScript(script1);

    waitFor(function(){return isCbgLoadSuss()}, function() {
                    makeAScreen("item_show");
                    page.evaluateJavaScript(script3);

                    waitFor(function(){
                        return isCbgLoadSuss();
                    },function(){
                        makeAScreen("price_up");
                        phantom.exit();
                    },10000);

                    },10000);

};

page.open(webSite, function(status){
    console.log("Status:connect "+status);
    if(status == "success"){
        //
    }
});
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值