phantomjs小试

简单来说,phantomjs就是一个运行在node上的webkit内核,支持DOM渲染,css选择器,Canvas,SVG等,在浏览器上能做的事情,理论上,phantomjs 都能模拟做到。

phantomjs 使用场景:

页面自动化测试: 无需浏览器的情况下进行快速的Web测试,且支持很多测试框架,如YUI Test、Jasmine、WebDriver、Capybara、QUnit、Mocha等。 网页监控: 定期打开页面,检查网站是否正常加载,加载结果是否符合预期等 页面截图:以编程方式抓起CSS、SVG和Canvas等页面内容 网络爬虫:抓取网络页面

start

在官网直接下载phantomjs。windows环境直接下载exe文件,解压,运行

http://phantomjs.org/download.html

来个截图小demo

由于phantomjs相当于一个没有UI的浏览器,可以抓取url下的所有内容,并渲染。因此,网络截图,对于phantomjs来说,就不费劲了。

var page = require('webpage').create();
var url = 'http://ke.qq.com';
page.open(url, function (status) {
  page.render('index.png');
  phantom.exit();
});

保存文件为capture.js,在终端运行 phantomjs catpure.js ,然后就可以在同目录下看到高大上的腾讯课堂首页的图片了。

phantomjs 实现登录

在写一些爬虫程序的时候,可能会需要先登录系统,获取登录的cookie。如果有node request 或是java 写的话,需要去了解系统本身的登录逻辑,实现起来比较困难,特别是登录设计复杂的时候。用phantomjs 实现登录要简单很多,加载登录页面后,在evalutae 包裹的沙箱内,直接对页面进行登录信息的写入,并模拟登记的行为,之后的跳转、cookie set等就直接交给phantomjs 完成。

下面是一个用phantomjs实现小米商城登录的栗子:

var page = require('webpage').create(),
    testindex = 0,
    loadInProgress = false;

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

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

var steps = [
    function() {
      //Load Login Page
      page.open("https://account.xiaomi.com/pass/serviceLogin");
    },
    function() {
        page.evaluate(function(obj) {
            var form = document.getElementById("miniLogin");
            form.elements["miniLogin_username"].value = '用户名';
            form.elements["miniLogin_pwd"].value = '密码';
            form.elements['message_LOGIN_IMMEDIATELY'].click();
            return document.title;
        });
        loadInProgress = true;
    },
    function() {
        page.render('login-succ.png');
    }
];

var interval = setInterval(function() {
    if (!loadInProgress && typeof steps[testindex] == "function") {
        steps[testindex]();
        testindex++;
    }
    if (typeof steps[testindex] != "function") {
        phantom.exit();
    }
}, 10);

在终端执行phantomjs 命令,最后,可以看到登录后的页面截图

延伸阅读

CasperJS:一个开源的导航脚本处理和高级测试工具

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏美丽应用

滚动截图:更人性化的长截图工具

531
来自专栏君赏技术博客

写一下MAC不错的工具集

##这款软件可以很快的从当前文件夹打开控制台到当前的路径,可以防止小图标到finder的小图标,貌似现在不可以放置了

1583
来自专栏主机笔记

最新版chevereto3.10.5使用体验

使用chevereto图床几天之后,发现这个图床系统还是挺好用的,虽然安装简单,功能很强大。 既然是一个功能的网站,就说说他使用的体验 ? chevereto网...

4975
来自专栏FreeBuf

XSS的原理分析与解剖

作者 Black-Hole 0×01 前言: 《xss攻击手法》一开始在互联网上资料并不多(都是现成的代码,没有从基础的开始),直到刺的《白帽子讲WEB安全》...

1927
来自专栏九彩拼盘的叨叨叨

Web 前端性能优化概要

本文遵守创作共享CC BY-NC-SA 4.0协议 网络平台如需转载必须与本人联系确认。

801
来自专栏Linyb极客之路

前端性能优化-雅虎军规35条

合并图片(如css sprites,内置图片使用数据)、合并CSS、JS,这一点很重要,但是要考虑合并后的文件体积。

1145
来自专栏韩东吉的Unity杂货铺

零基础入门 6: 菜单介绍

每个月总要忙那么一段时间,因为之前的存稿保持在日更,导致后续忙起来没有时间来得及写新的内容,就一直没有更新。今天趁着午休来更新一篇。主要说下Unity里复杂的菜...

1152
来自专栏程序员叨叨叨

【13】如何使用PS进行图片批量处理

最近笔者在项目中做技能模块的时候,用到外包给的一系列技能图标,但发现外包给到的图标分辨率、尺寸不一致,所以想到之前学校里,软件设计与交互课上有提到PS可以将一系...

612
来自专栏大数据挖掘DT机器学习

使用R语言挖掘QQ群聊天记录

1、获取数据 从 QQ 消息管理器中导出消息记录,保存的文本类型选择 txt 文件。这里获取的是某群从 2016-04-18 到 2016-05-07 期间的聊...

3275
来自专栏偏前端工程师的驿站

Eclipse魔法堂:修改主题

一、前言                                   习惯黑色主题,而Eclipse默认的白底主题显然不是我的菜,下面一起来修改主题吧!...

1876

扫码关注云+社区