凤凰山笔记

phantomjs签到

最近用积分换了一个2345的抱枕,皮面比较脏,不过放在办公司还好。

因为SAE收费,所以之前的SAE上的Python签到也不能运行了,所以只能想起来才会去2345签到一次,有点影响本来就很少的收入啦,haha.

看到微信可以绑定2345账号,并且登录和签到根本不需要验证码,抓了下url,大概格式如下:

http://jifen.2345.com/m/guess.php?ctl=login&act=checkBind&openid=xxxxx&urlParam=xxxx&t=xxxx&s=xxxx

xxxx都是特定的内容,用于用户的验证,这样用户可以直接通过微信登录不需要用户名密码了

最近看到同事用phantomjs进行网页截图,很好很强大,简单研究了一下,想用它写个签到脚本。

于是有了下面的粗糙代码,写的不好。主要是phantomjs有自身的局限性,比如不能像java Python那样按照代码的顺序执行,而是像Javascript一样,是基于消息驱动的。代码的执行都是异步化的。所以有些痛苦,感觉用于自动化测试应该效果不很理想。

运行方式:./phantomjs 2345.js


//设置输出编码
phantom.outputEncoding = 'gb2312';

var page ;

//绑定微信号登录,防止验证码的问题
var myurl = "绑定2345微信后可从微信客户端获取";

var shoujiurl = "http://shouji.2345.com/index.php";

var renderPage = function (url) {
page = require('webpage').create();

page.onConsoleMessage = function(msg, lineNum, sourceId) {
  console.log('CONSOLE: ' + msg + ' (from line #' + lineNum + ' in "' + sourceId + '")');
};

page.onNavigationRequested = function(url, type, willNavigate, main) {
    if (main && url!=myurl && url!=shoujiurl) {
        myurl = url;
        console.log("redirect caught")
        page.close()
        setTimeout('renderPage(myurl)',1); //Note the setTimeout here
    }
};

page.open(url, function(status) {
    if (status==="success") {
            console.log("The final url is :"+myurl);

            //pc推广
            page.evaluate(function() {
                var href= $(".aSignBtn").attr("href");
                console.log("href = "+href);

                if($(".aSignBtn").attr("onclick")){
                    $(".aSignBtn").attr("onclick",href);
                    $(".aSignBtn").click();
                }else{
                    console.log("pc already checked");
                }

                console.log("pc checked...");
            });

            //手机推广
            page.open(shoujiurl, function(status) {
                    page.evaluate(function() {
                        console.log($(".signBtn").html());
                        $(".signBtn").click();

                        console.log("shouji checked...");
                    });
            });
    } else {
            console.log("failed")
            phantom.exit(1);
    }
});

}

renderPage(myurl);

setTimeout(function(){
    page.close;
    page = require('webpage').create();

    page.settings.userAgent = 'Mozilla/5.0 (Windows NT 6.2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.116 Safari/537.36 2345chrome v2.3.0.2200';
    //console.log('The default user agent is ' + page.settings.userAgent);

    page.open("http://www.2345.com/?k718881649",function(status){
        //page.render('index.png');
        console.log("visit index page...");
        phantom.exit(1);
    });
},15000);

cloudroc wechat
欢迎您扫一扫上面的微信公众号,订阅我的博客!
很惭愧,只做了些微小的工作,您的支持将鼓励我继续努力创作!