play with phantomjs


phantomjs 是一个无界面的webkit浏览器, 可以通过它在服务器端直接用JS代码访问页面中的各种元素、方法和属性, 甚至截取屏幕。

安装

全局安装即可, 以后再需要局部安装时会检测时候有全局安装, 有的话会引用全局安装的包。

npm install -g phantomjs --phantomjs_cdnurl=http://npm.taobao.org/mirrors/phantomjs

完成之后可以通过 phantomjs -v查看是否全局安装成功

运行

使用 phantomjs ./test.js 即可执行指定路径下的文件。在这里尝试使用phantomjs登录百度并且截屏:

```javascript name=test.js var page = require(‘webpage’).create() page.settings.userAgent = ‘Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1’ page.viewportSize = { width: 750, height: 1334 }

var loadInProgress = true var pageIndex = 0

page.onConsoleMessage = function(msg) { console.log(‘===CONSOLE===\n’ + msg); }

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

page.onLoadFinished = function() { loadInProgress = false; console.log(“===load finished===”); pageIndex ++

if(pageIndex == 1) {
    delayedCall(goLogin)
}
else if(pageIndex == 2) {
    delayedCall(submit)
}
else {
    delayedCall(snapshot)
} };

function goLogin () { page.evaluate(function() { var evObj = document.createEvent(‘Events’); evObj.initEvent(‘click’, true, false); document.getElementById(‘login’).dispatchEvent(evObj); }) }

function submit() { page.evaluate(function () { document.getElementById(‘login-username’).value = ‘my-username’ document.getElementById(‘login-password’).value = ‘my-password’ document.getElementById(‘login-submit’).removeAttribute(‘disabled’) var evObj = document.createEvent(‘Events’); evObj.initEvent(‘click’, true, false); document.getElementById(‘login-submit’).dispatchEvent(evObj); }) snapshot() }

function snapshot () { window.setTimeout(function () { page.render(‘snapshot.jpg’, {format: ‘jpeg’, quality: ‘100’}) // phantom.exit() }, 3000) }

function delayedCall (cb) { setTimeout(cb, 500) }

page.open(‘https://www.baidu.com’, function () { // Todo }) ```