phantomjs應用(一)

關注phantomjs比較早,以前也作過一些學習總結,但是一直都沒寫博客,這裏再記錄下。爲了讓同事也開始學習瞭解下, 提供了一個demo,固然,這個demo也是根據一些資料整理而來。
這個demo很簡單,就是訪問百度,而後輸入關鍵字,提交表單,而後獲取部分結果javascript

system = require('system')
var page = require('webpage').create();
phantom.outputEncoding = 'gb2312';
page.settings = {
    javascriptEnabled: true,
    loadImages: true,
    userAgent: 'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:43.0) Gecko/20100101 Firefox/43.0'
};


todo:
var t_key_word = '';
if (system.args.length === 1) {
    phantom.exit(1);
} else {
    t_key_word = system.args[1];
    console.log("search keyword " + t_key_word + " from www.baidu.com");
}

console.log(t_key_word)


testindex = 0, loadInProgress = false;
page.onConsoleMessage = function (msg) {
    console.log(msg);
};

page.onLoadStarted = function () {
    loadInProgress = true;
    console.log("load started");
};

page.onLoadFinished = function () {
    loadInProgress = false;
    console.log("load finished");
};

var steps = [
    //open url
    function () {
        page.open("http://www.baidu.com");
    },
    //enter input
    function () {
        page.render("step1-1.png");
        page.evaluate(function (key_word) {
            console.log("*****************************");
            var kw = document.getElementById('kw');
            kw.value = key_word;
            return;
        }, t_key_word);
        page.render("step1-2.png");
    },
    //submit
    function () {
        page.evaluate(function () {
            var search_btn = document.getElementById('su');
            search_btn.click();
            return;
        });
        page.render("step2.png");
    },
    //get search result
    function () {
        var content_rst = page.evaluate(function () {
            var rst = new Array();
            var len = document.getElementsByTagName('h3').length;
            for (i = 0; i < len; i++) {
                rst[i] = document.getElementsByTagName('h3')[i].innerHTML;
            }
            return rst;
        });
        console.log(content_rst);
    }
];


interval = setInterval(function () {
    if (!loadInProgress && typeof steps[testindex] == "function") {
        console.log("step " + (testindex + 1));
        steps[testindex]();
        testindex++;
    }
    if (typeof steps[testindex] != "function") {
        console.log("test complete!");
        phantom.exit();
    }
}, 2000);

另存爲test.js
而後執行phantomjs test.js javascript
就會搜索javascript關鍵字java

須要注意的地方是:
page.evaluate會啓動一個sandbox來執行js, 因此裏面的參數不能直接從外面獲取,不過還好evaluate接受兩個參數,第一個是必需的,表示須要在page上下文運行的函數 function;第二個是可選的,表示須要傳給 function的參數 param,好比上面的key_worldweb

相關文章
相關標籤/搜索