使用PhantomJS
PhantomJS是一个基于WebKit的服务器端JavaScript API。它全面支持Web而无需浏览器支持,不仅运行快,原生支持各种web标准:DOM处理、CSS选择器、JSON、Canvas,和SVG。PhantomJS可以用于网页自动化,网络监测,网页截屏,以及无界面测试。
1.安装PhantomJS
- 下载:http://phantomjs.org/download.html,然后把exe文件放到system32,运行cmd,输入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的更多相关文章
- Phantomjs+Nodejs+Mysql数据抓取(2.抓取图片)
概要 这篇博客是在上一篇博客Phantomjs+Nodejs+Mysql数据抓取(1.抓取数据) http://blog.csdn.net/jokerkon/article/details/50868 ...
- Phantomjs+Nodejs+Mysql数据抓取(1.数据抓取)
概要: 这篇博文主要讲一下如何使用Phantomjs进行数据抓取,这里面抓的网站是太平洋电脑网估价的内容.主要是对电脑笔记本以及他们的属性进行抓取,然后在使用nodejs进行下载图片和插入数据库操作. ...
- 使用PhantomJS实现网页截图服务
这是上半年遇到的一个小需求,想实现网页的抓取,并保存为图片.研究了不少工具,效果都不理想,不是显示太差了(Canvas.Html2Image.Cobra),就是性能不怎么样(如SWT的Brower). ...
- 如何用phantomjs去抓取js渲染后的页面
1.安装phantomjs 网上有很多. 2.执行官网上的示例代码 // Read the Phantom webpage '#intro' element text using jQuery and ...
- Python爬虫学习(10):Selenium的好基友PhantomJS
上一节中我们学习了selenium,用python来操作浏览器,在做网页自动化测试的时候最好不过了 .如果我们来做爬虫用一个带界面的浏览器似乎不太好吧,那可咋办呢?别着急,下来我们要介绍的就是一款不带 ...
- phantomjs 双向认证,访问nginx,https
应用背景: phantomjs的一个爬虫,访问https站点,单向认证(只认证服务器身份)的都可以,双向认证(服务器和客户端都需要认证)必须上传本地证书: 开始用一个包含公钥私钥的PEM证书访问,怎么 ...
- selenium phantomjs 关闭问题
一个获取供应商余额的项目中,使用了 selenium 来爬虫,原因是获取余额不用太频繁,对性能要求不高.第二是 selenium 更好应对各种页面. 项目中,selenium webdriver使用了 ...
- 利用PhantomJS进行网页截屏,完美解决截取高度的问题
关于PhantomJS PhantomJS 是一个基于WebKit的服务器端 JavaScript API.它全面支持web而不需浏览器支持,其快速,原生支持各种Web标准: DOM 处理, CSS ...
- phantomjs+selenium实现爬取动态网址
之前使用 selenium + firefox驱动浏览器来实现爬取动态网址,但是firefox经常更新,更新后时常会导致webdriver启动不来,所以改用phantomjs+selenium来改善一 ...
- 爬虫:selenium + phantomjs 解决js抓取问题(一)
selenium模块主要用来做测试,模拟键盘.鼠标来操作浏览器. phantomjs 就像一个无界面的浏览器一样. 两个结合能很好的解决js抓取的问题. 测试代码: #coding=utf-8 fro ...
随机推荐
- spark streaming基本概念一
在学习spark streaming时,建议先学习和掌握RDD.spark streaming无非是针对流式数据处理这个场景,在RDD基础上做了一层封装,简化流式数据处理过程. spark strea ...
- .Net界面开发神器—DevExpress官方汉化包免费下载!还在等什么?
点击获取DevExpress v19.1.7新版试用下载 DevExpress Localization Service允许您创建一组自定义的附属程序集,要将语言包添加到程序集中,请查看本文中为大家列 ...
- Hive中将文件加载到数据库表失败解决办法
Hive中将文件加载到数据库表失败解决办法(hive创建表失败) 遇到的问题: FAILED: Execution Error, return code 1 from org.apache.hadoo ...
- JAVA访问Zabbix API
Zabbix 一.Zabbix 概述 zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案.zabbix能监视各种网络参数,保证服务器系统的安全运营:并提供灵活的 ...
- 题解 【NOI2010】超级钢琴
[NOI2010]超级钢琴 Description 小Z是一个小有名气的钢琴家,最近C博士送给了小Z一架超级钢琴,小Z希望能够用这架钢琴创作出世界上最美妙的音乐. 这架超级钢琴可以弹奏出n个音符,编号 ...
- How to Fix "Linux Failure to Download extra data files for ttf-mscorefonts-installer" error
How to Fix "Linux Failure to Download extra data files for ttf-mscorefonts-installer" erro ...
- maven打断点报错
- web文件夹上传源码
文件夹数据库处理逻辑 publicclass DbFolder { JSONObject root; public DbFolder() { this.root = new JSONObject(); ...
- NOIP 模拟赛 那些年,我们学过的文化课 --致已退役的fqk神犇.
/* 这大概是我第一次整理模拟赛吧. 唉. T2打了很长时间. 一开始读错题了中间都能缩合了. 真心对不起生物老师hhh. 这种状态判重的题目还是做的太少! */ 背单词 [题目描述] fqk 退役后 ...
- 推荐系统系列(六):Wide&Deep理论与实践
背景 在CTR预估任务中,线性模型仍占有半壁江山.利用手工构造的交叉组合特征来使线性模型具有"记忆性",使模型记住共现频率较高的特征组合,往往也能达到一个不错的baseline,且 ...