phantomjs笔记
简介:
PhantomJS是一个基于WebKit的服务器端JavaScript API,它基于 BSD开源协议发布。
PhantomJS无需浏览器的支持即可实现对Web的支持,且原生支持各种Web标准,如DOM处理、JavaScript、CSS选择器、JSON、Canvas和可缩放矢量图形SVG。
PhantomJS主要是通过JavaScript和CoffeeScript控制WebKit的CSS选择器、可缩放矢量图形SVG和HTTP网络等各个模块。
PhantomJS主要支持Windows、Mac OS、Linux三个平台,并且提供了对应的二进制安装包,读者可在下载页面选择对应的版本下载解压即可使用。
GitHub上还提供了GitHub、Google Code、BitBucket等各种方式的源码下载地址。
适用场景:
- 无需浏览器的Web测试:无需浏览器的情况下进行快速的Web测试,且支持很多测试框架,如YUI Test、Jasmine、WebDriver、Capybara、QUnit、Mocha等。
- 页面自动化操作:使用标准的DOM API或一些JavaScript框架(如jQuery)访问和操作Web页面。
- 屏幕捕获:以编程方式抓起CSS、SVG和Canvas等页面内容,即可实现网络爬虫应用。构建服务端Web图形应用,如截图服务、矢量光栅图应用。
- 网络监控:自动进行网络性能监控、跟踪页面加载情况以及将相关监控的信息以标准的HAR格式导出。
PhantomJS已形成了一个功能非常强大的生态圈内容,相关项目如下:
另外,还有众多基于phantomjs的截屏工具:
capturejs、pageres、phantomjs-screenshots、manet、screenshot-app
主要API:
官方的公布的主要模块如下:
- phantom // 可以理解为phantom运行环境中的全局对象,如bom中的window对象
- webpage // 主要功能模块,需要require后使用
- system // 主要封装了常见的系统交互功能,如命令行参数获取等
- webserver // 参照node的http模块的Server功能
- file // 参照node的fs模块
- childprogress // 参照node.js的childprogress模块
个人按照功能将其API分为以下几大块(和官方的分类不一样),大家可以按需查找:
sytem:
phantom.exit();
phantom.onError = function(msg, trace) {};
page.onError = function (msg, trace) {};
page.create(); //page模块初始化
page.open(url, cb);
page.render(file); //FileType: PDF/ PNG / JPEG / BMP / PPM / GIF
page.renderBase64(type); //type: PNG / GIF / JPEG
page.content;
page.plainText;
page.title;
navigator:
page.onConsoleMessage;
page.onAlert;
page.onClosing;
page.onConfirm;
page.onConfirm;
page.onFilePicke;
page.onInitialized; // before loaded
page.onLoadFinished;
page.onLoadStarted;
page.onNavigationRequested = function(url, type, willNavigate, main) {};
page.onPageCreated;
page.onPrompt = function(msg, defaultVal){};
page.onResourceError;
page.onResourceReceived;
page.onResourceRequested = function (reqdata, req) {}; // req.abort();
page.onResourceTimeout;
page.onUrlChanged;
page.onCallback; // 结合page.evaluate中使用window.callPhantom
settings:
page.settings.xxx = '';
// userAgent / javascriptEnabled / loadImages / localToRemoteUrlAccessEnabled / userName / password / XSSAuditingEnabled / webSecurityEnabled / resourceTimeout
page.customHeaders = {};
page.clipRect = { //网页截图大小
top: 0,
left: 0,
width: 100,
height: 100
};
page.zoomFactor = number; // 设置缩放
page.scrollPosition = {
top: 100,
left: 0
};
page.viewportSize = {
width: 480,
height: 800
};
page.sendEvent();
sendEvent(mouseEventType[, mouseX, mouseY, button='left'])
sendEvent(keyboardEventType, keyOrKeys, [null, null, modifier])
page.setContent(content, url);
page.uploadFile(selector, filename);
cookies:
phantom.cookies
page.cookies
phantom.addCookie({})
page.addCookie({})
phantom.deleteCookie
page.deleteCookie
注入:
page.includeJs(js, cb);
phantom.injectJs(js); // return true or false
page.evaluateAsync(cb);
page.evaluateJavaScript();
page.evaluate();
更多学习参考资料