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 条评论
登录 后参与评论

相关文章

来自专栏机器学习算法与Python学习

支持向量机Python实现(附源码与数据)

之前的文章已经将支持向量机的原理讲解的比较清楚了,今天这篇文章主要是基于Python实现支持向量机,具体的数据集和源代码如下所示(文末附有本文使用的数据集和源代...

3475
来自专栏小文博客

WordPress实现QQ卡片链接

QQ发出去一个网址后,在展示的时候,他会快速抓取网站的内容(标题,缩略图,描述)进行展示,抓取有特殊标记的内容,快速展示出来。我们可以通过在head部分加标签的...

37611
来自专栏王磊的博客

富编译器汇总及二次开发Demo

富文本编译器汇总 名称 总大小 当前版本 官方地址 扩展方法 xhEditor 1.43 MB v1.1.14 http://xheditor.com...

2905
来自专栏木子昭的博客

教你精确调整gif图片尺寸

按照以上方法, 我们可以对任何gif的尺寸进行精确调整, 对于这类实用小技巧,可以点赞记录一下, 以后或许会用到~

723
来自专栏算法channel

完整教程:使用caffe测试mnist数据集

想要入门深度学习没有几个趁手的兵器是不行的,目前流行的框架tensorflow、pytorch、caffe等,笔者也是最近接触了caffe,发现caffe非常适...

1136
来自专栏运维一切

ceph rbd resize之后文件系统的调节

###ceph的rbd是可以进行调节大小的,但是调节需要进行一些操作,否则你看不到调节之后的效果,等于没调节,因为rbd就相当一块硬盘,但是文件系统一经初始化,...

1171
来自专栏老付的网络博客

linux下sublime如何使用中文

原来在使用linux的时候最大的诟病是在sublime text下面不能写中文,各种百度和搜索都没能解决,但现在又重新下linux下面做开发,又要重新面对这个问...

712
来自专栏人工智障

visdom的安装及在pytorch下损失函数的可视化应用

更新:新版visdom0.1.7安装方式为:conda install -c srivasv visdom 

1850
来自专栏张戈的专栏

分享两种外链跳转方法,可避免权重流失。

前 2 天,在修改互推联盟自适应页面时,考虑到原先的跳转机制可能会对博友造成困扰,所以想修改成直接跳转模式,彻底抛弃之前强行重写 title 即 iframe ...

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

学习纲要:代码编辑器

753

扫码关注云+社区