phantomjs笔记

更新时间:2016-02-21 作者:小僧

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的截屏工具:

capturejspageresphantomjs-screenshotsmanetscreenshot-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();     

更多学习参考资料

前一篇:猴年看耍猴

后一篇:独立思考能力的5步养成法