使用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 ...
随机推荐
- php的lareval框架配置出错
前两天,在学习php的 lareval 框架时,从官网上下载完lareval的安装包后,按照网上的配置教程一点一点的配置完后,当点击public 文件运行时就出现一个让我很头痛的问题,我自己外加两个大 ...
- java学习笔记(二)分布式框架Dubbo+zookeeper搭建
参考文章http://www.cnblogs.com/sxjun/p/6963844.html 注意的几个问题: 1.配置dubbo.properties 将以下地址改为你Zookeeper注册的地址 ...
- 使用python获得屏幕截图并保存为位图文件
直接上代码: import win32gui import win32ui from ctypes import windll import Image hwnd = win32gui.FindWin ...
- Java-DealString工具类
import java.text.NumberFormat; import java.util.Date; import java.util.Locale; import java.util.Stri ...
- Web前端开发——HTML文件结构
在编写html文件时,把文件保存成 .htm 或 .html的后缀. 基本文件结构 <html> <head> <title></title> < ...
- Swagger2常用注解和使用方法
一 引入maven依赖 <!--整合Swagger2--> <dependency> <groupId>com.spring4all</groupId&g ...
- 【Andriod-AlertDialog控件】 弹出对话框AlertDialog用法
Result: Code: import android.app.Activity; import android.app.AlertDialog; import android.content.Di ...
- java+大文件断点续传
用JAVA实现大文件上传及显示进度信息 ---解析HTTP MultiPart协议 (本文提供全部源码下载,请访问 https://github.com/1269085759/up6-jsp-mysq ...
- hihocoder 1457 后缀自动机四·重复旋律7 ( 多串连接处理技巧 )
题目链接 分析 : 这道题对于单个串的用 SAM 然后想想怎么维护就行了 但是多个串下.可以先将所有的串用一个不在字符集( 这道题的字符集是 '0' ~ '9' ) 链接起来.建立后缀自动机之后 在统 ...
- 洛谷比赛 U4858 sum
U4858 sum 题目提供者666sb666 最新讨论 题目背景 定义一个序列的价值为序列中相邻元素差的绝对值之和. 如序列{2,1,3}的价值为|2-1|+|1-3|=3,而序列{4}的价值为0. ...