PhantomJS是一个基于WebKit的服务器端JavaScript API。它全面支持Web而无需浏览器支持,不仅运行快,原生支持各种web标准:DOM处理、CSS选择器、JSON、Canvas,和SVG。PhantomJS可以用于网页自动化,网络监测,网页截屏,以及无界面测试。

1.安装PhantomJS

2.页面加载

  • 通过PhantomJS,一个网页可以被加载、分析和通过创建网页对象呈现。下面演示简单页面的加载列子:
var page = require('webpage').create();
page.open('http://www.cnblogs.com/guguobao/',function(status){
console.log("Status:"+status);
if (status === "success"){
page.render('guobao.png');
}
phantom.exit();
});

首先使用webpage模块创建一个page对象,然后通过page对象打开网页

3.代码评估

  • 为了评估网页中的js代码,可以利用evaluate。这个执行是'沙盒式'的,他不会去执行网页外的js代码。evaluate方法可以返回一个对象。然而返回值仅限对象,不能包含函数(或闭包)。
var url  = 'http://www.cnblogs.com/guguobao/'
var page = require('webpage').create();
page.open(url,function(status){
var title = page.evaluate(function(){
return document.title;
})
console.log('Page title is'+title);
phantom.exit();
});
  • 任何来自网页并且evaluate()内部代码的控制台信息,默认不会显示。要覆盖此行为,使用onConsoleMessage回调方法。代码如下:
var url  = 'http://www.cnblogs.com/guguobao/';
var page = require('webpage').create();
page.onConsoleMessage = function(msg){
console.log('Page title is'+ msg);
};
page.open(url,functon(status){
page.evaluate(function(){
console.log(document.title);
});
phantom.exit();
});

4.屏幕截图

  • 由于PhantomJS使用的是Webkit内核,一个真正的布局和渲染引擎,他可以捕捉一个网页的屏幕截图。另外PhantomJS可以渲染网页上的元素,所以它不仅仅用于HTML和CSS的内容转换,还可以用于SVG和画布。PhantomJS不仅可以保存为png,还可以pdf。
var page = require('webpage').create();
page.open('http://www.cnblogs.com/guguobao/',function(status){
console.log("Status:"+status);
if (status === "success"){
page.render('guobao.pdf');
}
phantom.exit();
});

5.网络监控

  • PhantomJS允许检验网络流量,因此它适合分析网络行为和性能,实现 对网络的监听。
var url = 'http://www.cnblogs.com/qiyeboy/'
var page = require('webpage').create();
page.onRepaintRequested = function(request){
console.log('Request'+JSON.stringify(request,undefined,4));
};
page.onResourceReceived = function(response){
console.log('Receive' + JSON.stringify(response,undefined,4));
};
page.open(url);

6.网页自动化

  • PhantomJS可以加载和处理网页,非常适合自动化处理,PhantomJS中标准JavaScript的DOM操作和CSS选择器都是生效。例如:
var page = require('webpage').create();
console.log('The default user agent is ' + page.settings.userAgent);
page.settings.userAgent = 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:49.0) Gecko/20100101 Firefox/49.0';
page.open('http://movie.mtime.com/108737/', function(status) {
if (status !== 'success') {
console.log('Unable to access network');
} else {
var ua = page.evaluate(function() {
return document.getElementById('ratingRegion').textContent;
});
console.log(ua);
}
phantom.exit();
});

首先创建page对象,接着指定user-agent,打开网页,加载完成后,执行DOM操作,获取id=ratinRegion元素的内容,

  • 在1.6版本后,支持添加外部js库,例如:
 var page = require('webpage').create();
page.open('http://www.sample.com', function() {
page.includeJs("http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js", function() {
page.evaluate(function() {
$("button").click();
});
phantom.exit()
});
});

使用PhantomJS的更多相关文章

  1. Phantomjs+Nodejs+Mysql数据抓取(2.抓取图片)

    概要 这篇博客是在上一篇博客Phantomjs+Nodejs+Mysql数据抓取(1.抓取数据) http://blog.csdn.net/jokerkon/article/details/50868 ...

  2. Phantomjs+Nodejs+Mysql数据抓取(1.数据抓取)

    概要: 这篇博文主要讲一下如何使用Phantomjs进行数据抓取,这里面抓的网站是太平洋电脑网估价的内容.主要是对电脑笔记本以及他们的属性进行抓取,然后在使用nodejs进行下载图片和插入数据库操作. ...

  3. 使用PhantomJS实现网页截图服务

    这是上半年遇到的一个小需求,想实现网页的抓取,并保存为图片.研究了不少工具,效果都不理想,不是显示太差了(Canvas.Html2Image.Cobra),就是性能不怎么样(如SWT的Brower). ...

  4. 如何用phantomjs去抓取js渲染后的页面

    1.安装phantomjs 网上有很多. 2.执行官网上的示例代码 // Read the Phantom webpage '#intro' element text using jQuery and ...

  5. Python爬虫学习(10):Selenium的好基友PhantomJS

    上一节中我们学习了selenium,用python来操作浏览器,在做网页自动化测试的时候最好不过了 .如果我们来做爬虫用一个带界面的浏览器似乎不太好吧,那可咋办呢?别着急,下来我们要介绍的就是一款不带 ...

  6. phantomjs 双向认证,访问nginx,https

    应用背景: phantomjs的一个爬虫,访问https站点,单向认证(只认证服务器身份)的都可以,双向认证(服务器和客户端都需要认证)必须上传本地证书: 开始用一个包含公钥私钥的PEM证书访问,怎么 ...

  7. selenium phantomjs 关闭问题

    一个获取供应商余额的项目中,使用了 selenium 来爬虫,原因是获取余额不用太频繁,对性能要求不高.第二是 selenium 更好应对各种页面. 项目中,selenium webdriver使用了 ...

  8. 利用PhantomJS进行网页截屏,完美解决截取高度的问题

    关于PhantomJS PhantomJS 是一个基于WebKit的服务器端 JavaScript API.它全面支持web而不需浏览器支持,其快速,原生支持各种Web标准: DOM 处理, CSS ...

  9. phantomjs+selenium实现爬取动态网址

    之前使用 selenium + firefox驱动浏览器来实现爬取动态网址,但是firefox经常更新,更新后时常会导致webdriver启动不来,所以改用phantomjs+selenium来改善一 ...

  10. 爬虫:selenium + phantomjs 解决js抓取问题(一)

    selenium模块主要用来做测试,模拟键盘.鼠标来操作浏览器. phantomjs 就像一个无界面的浏览器一样. 两个结合能很好的解决js抓取的问题. 测试代码: #coding=utf-8 fro ...

随机推荐

  1. zzzphp V1.6.0 按照功能分析漏洞

    0 基础支撑功能 0.1 路由功能 0.2 模版解析 * zzzphp V1.6.0 的代码执行漏洞,模版解析功能的问题 程序解析模版时,将模版中的部分内容匹配出来直接传递给了eval,且没有经过过滤 ...

  2. JAVA 流与文件

    流 InputStream和OutputStream是所有的输入流和输出流的超类.他们两个都是抽象类. read方法和write方法都是阻塞方法,这意味着如果不能里可以写入或者读取,比如因为网络问题, ...

  3. wcPro--WordCount扩展

    Github:https://github.com/whoNamedCody/wcPro PSP表格 PSP2.1 PSP阶段 预估耗时 (分钟) 实际耗时 (分钟) Planning 计划     ...

  4. 使用IDEA创建JavaWeb项目 部署本地tomcat并运行

    一.下载商业版IDEA 官方链接:https://www.jetbrains.com/idea/download/#section=windows 二.新建JavaWeb项目 1.在菜单栏找到File ...

  5. python面试题--连续出现最大次数

    确实有段时间没怎么写python,手写还不上机是真的难受. 而且break 跳出循环最内一层的事情都要想一下才能写得出来. 题目如下: 寻找一个字符串最大连续出现次数,并放入字典中, s=" ...

  6. ScrollViewer控件

    内容超过空间,出现滚动条. <Grid> <ScrollViewer Margin="5" VerticalScrollBarVisibility="A ...

  7. CCPC-Wannafly & Comet OJ 夏季欢乐赛(2019)G

    题面 一道暴水的dp....别问我为什么直接打开了G题,我只是对题目名称感兴趣而已.... #include<bits/stdc++.h> #define ll long long usi ...

  8. 关于MapReduce的测试

    题目:数据清洗以及结果展示 要求: Result文件数据说明: Ip:106.39.41.166,(城市) Date:10/Nov/2016:00:01:02 +0800,(日期) Day:10,(天 ...

  9. 大体知道java语法2----------理解面向对象

    我参加过大大小小n场面试,被好几位面试官问到过:能不能谈谈面向对象的几大特征?什么是面向对象?对于这两个问题,我始终觉得一定要理解,其实不只是这种概念题(姑且算它是概念题吧),包括各种语法都应该去理解 ...

  10. 用 Docker 搭建 ORACLE 数据库开发环境

    用 Docker 搭建 ORACLE 数据库开发环境 需要安装 ORACLE 数据库做开发,直接安装的话因为各类平台的限制,非常复杂,会遇到很多问题. 还好,现在有 Docker 化的部署方式,省去很 ...