`
xtuhcy
  • 浏览: 139012 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

无头浏览器,从phantomjs到webkit4j

阅读更多

一、从浏览器说起

无头浏览器即headless browser,是一种没有界面的浏览器。既然是浏览器那么浏览器该有的东西它都应该有,只是看不到界面而已。

浏览器内核

  • Webkit:目前最主流的浏览器内核,webkit是苹果公司开源的浏览器内核,其前身是KHTML。基于Webkit的浏览器很多,比如Safari,Chrome,Opera

  • Gecko:是Firefox浏览器的内核

  • Trident:是IE浏览器的内核

  • Blink:是webkit的一个分支版本,由google开发

Webkit内核

Webkit无疑是目前最流行的浏览器内核,以Webkit为核心存在很多移植(port),包括Safari、iPhone、Chrome、Android、QTWebKit等。不同的port专注于不同的领域。Mac的port注意力集中在浏览器和操作系统的分割上,允许把ObjectC和C++绑定并嵌入原生应用的渲染。Chromium专注在浏览器上。QtWebKit的port在他的跨平台GUI应用架构上给apps提供运行时环境或者渲染引擎。

二、无头浏览器

  • PhantomJS:基于QtWebkit的无头浏览器,第一看到PhantomJS以为是一个NodeJS的模块,其实PhantomJS和NodeJS的处于同等级别的应用,两者毫无关系。唯一有联系的就是他们使用的开发语言都是javascript
  • SlimerJS:基于Gecko的无头浏览器,SlimerJS和PhantomJS基本兼容,就是一个内核换成了Gecko的PhantomJS
  • HtmlUnit:纯java开发的无头浏览器,完全java开发,javascript引擎使用的是Rhnio,由于不是基于Webkit、Gecko等主流内核开发,兼容性不好

PhantomJS

PhantomJS可以说是目前使用最为广泛,也是最被认可的无头浏览器。由于采用的是Webkit内核,因此其和目前的Safari,Chrome等浏览器兼容性十分好。

安装

PhantomJS的安装十分简单,下载http://phantomjs.org/download.html,下载下来后解压即可。编写测试代码test.js

var page = require('webpage').create();
page.open('http://example.com', function(status) {
  console.log("Status: " + status);
  console.log(page.content);
  phantom.exit();
});

bin\phantomjs.exe test.js,如果status返回success即成功。通过page.content即可获得下载并渲染好的网站内容。

和nodejs结合使用

前面说过,PhantomJS和NodeJS是平等的关系,如果说NodeJS把javascirpt引擎V8挪到服务器端,PhantomJS则把WebKit整个引擎都挪到了服务器端。

在nodejs中使用phantomjs,需要用到phantomjs中的一个Child Process模块,介绍在这里http://phantomjs.org/api/child_process/

庆幸的是万能的github已经有对phantomjs的node支持库,项目地址在这里https://github.com/amir20/phantomjs-node

和java结合使用

PhantomJs和java的结合使用目前还比较麻烦,主要还是直接调用phantomjs执行,如:

Runtime rt = Runtime.getRuntime();     
Process p = rt.exec("phantomjs /Users/cxs/utils/phantomjs/codes.js "+url);

既然nodejs可以通过child_process实现与phantomjs的交互,那么java为啥不行呢?目前还没有找到相应的实现,笔者也在研究这块,希望能提供一个java的实现。

通过webserver提供服务

可以利用Web服务,在phantomjs中启动一个微型web服务,java进程往这个web服务发送数据及接受处理完成的结果。web服务有两个方式:

  1. 利用PhantomJS自带的webserver模块,可以参考这里:http://phantomjs.org/api/webserver/
  2. 利用NodeJS,搭建Web服务

三、java环境下的无头浏览器

那么在java环境下有没有一款完全兼容webkit的无头浏览器呢?笔者目前还没有找到任何一款这样的浏览器。要实现这样的浏览器有三个思路:

  1. 完全使用java开发,包括dom解析、css解析、javascript引擎等;
  2. 利用phantomjs的Child Process模块,实现一个类似phatomjs-node的java扩展;
  3. 开发一个java版本的PhantomJS

HtmlUnit

HtmlUnit是一款纯java开发的无头浏览器,他既没有用weibkit内核,也没用gecko内核,其dom解析、css解析、javascript解析都是纯java开发的,因此其兼容性不太理想。

目前HtmlUnit的最新版本的javascript引擎使用的是一款很老的叫做Rhnio的引擎,不管在效率和兼容性上都不理想。在java8中已经使用Nashorn代替Rhnio引擎,Nashorn完全支持ECMAScript 5.1规范,但是笔者尝试用Nashorn代替Rhnio使用HtmlUnit,还是不能有效的解析JQuery这种十分流行的js框架。

webkit4j

既然PhantomJS可以利用QtWebkit开发出无头浏览器,为啥不能用java结合QtWebkit开发同样的无头浏览器呢,笔者在github上建了一个项目https://github.com/xtuhcy/webkit4j,目前在window环境下已经能成功调用qtwebkit,也希望有兴趣的朋友能一起参与讨论。

0
0
分享到:
评论

相关推荐

    phantomjs:可编写脚本的无头浏览器

    可脚本的无头WebKit PhantomJS( )是可使用JavaScript编写的无头WebKit。 最新的是2.1版。 重要提示:PhantomJS开发将暂停,直到另行通知(有关更多详细信息,请参阅 )。用例无头Web测试。 无需浏览器即可进行闪电...

    phantomjs-2.1.1-windows和echarts-convert

    (1)一个基于webkit内核的无头浏览器,即没有UI界面,即它就是一个浏览器,只是其内的点击、翻页等人为相关操作需要程序设计实现。 (2)提供javascript API接口,即通过编写js程序可以直接与webkit内核交互,...

    page_performance:使用 Phantomjs(一种基于 webkit 的无头浏览器)测试一个或多个网站的页面性能

    这个库使用 ,它是一个无头的、基于 webkit 的浏览器。用法 PagePerformance v. 0.5.3This program is intended to test the performance of a website. It uses phantomjs which is a headless,webkit based cli ...

    phantomjs 2.1.1 for windows

    提供phantomjs 2.1.1 for windows快速下载 phantomjs是一个基于webkit内核的无头浏览器,即没有UI界面,即它就是一个浏览器,只是其内的点击、翻页等人为相关操作需要程序设计实现。 为啥必须设置下载积分...

    mocha-phantomjs:通过phantomjs在命令行中运行客户端Mocha测试

    phantomjs多年来一直为我们提供出色的无头浏览器,但是现在有了适用于和和无头模式,我们有了更好的选择。 是一个受mocha-phantomjs启发的项目,因此迁移应该很容易,并且您将在50%的用户实际使用的浏览器上运行...

    grunt-yslow:使用grunt任务调用的YSlow库测试网页性能

    使用无头WebKit浏览器PhantomJS测试页面性能的艰巨任务。 入门 使用以下命令在项目的[grunt.js gruntfile]旁边安装此grunt插件: npm install grunt-yslow --save-dev 然后将此行添加到项目的grunt.js gruntfile中...

    phpunit-headless:Headless 是 PHPUnit 的 PhantomJS 和 SlimerJS 集成

    PhantomJS 是 Google/Safari 使用的运行在 WebKit 上的无头浏览器。 它不是一个测试框架。 这里的测试是通过 PHPUnit 作为测试运行器启动的。 它在 Linux 上完全无头(无 X11)运行,是持续集成系统的理想选择。 ...

    phantomjs2.1.1官方安装版

    phantomjs是一款带JavaScript API的无头WebKit脚本,具有绿色灵活,易于使用的特点。可以基于webkit浏览器来编译解释JavaScript代码,支持Web标准、DOM操作、JSON、HTML5、Canvas、SVG的同时,提供了处理文件I/O的...

    phantomjs-nagios:Nagios 检查 PhantomJS。 使用 nagios 渲染一个完整的无头网页并测试加载时间

    PhantomJS - 无头 WebKit 这个 Nagios 插件使用 PhantomJS 来测试加载时间。 PhantomJS 加载和呈现网站,就像您使用浏览器一样。命令行-u, --url [字符串] -w, --warning [浮动] -c, --critical [浮动] -p, --...

    java利用phantomjs进行截图实例教程

    PlantomJs是一个基于javascript的webkit内核无头浏览器 也就是没有显示界面的浏览器,你可以在基于 webkit 浏览器做的事情,它都能做到。下面这篇文章主要给大家介绍了关于java利用phantomjs进行截图的相关资料,...

    snap.zip网页快照功能代码

    (一)PhantomJS是可使用JavaScript编写脚本的无头Web浏览器。它可以在Windows,macOS,Linux和FreeBSD上运行。使用QtWebKit作为后端,它为各种Web标准提供了快速的本机支持:DOM处理,CSS选择器,JSON,Canvas和SVG...

    phantomjs-2.1.1-windows

    phantomjs是一款带JavaScript API的无头WebKit脚本,具有绿色灵活,易于使用的特点。可以基于webkit浏览器来编译解释JavaScript代码,支持Web标准、DOM操作、JSON、HTML5、Canvas、SVG的同时,提供了处理文件I/O的...

    phantomjs-qunit-runner:自动从code.google.compphantomjs-qunit-runner导出

    PhantomJs(兼容Webkit的无头浏览器)中运行QUnit测试框架来工作,并解析输出以报告成功或失败。 这在连续集成环境中特别有用。 有关使用示例,请参见 消息 2012年10月7日:发布了1.0.15版。 现在可以进行QUnit异步...

    xssmap:基于phantomjs和go的(DOM-)XSS fuzzer

    xssmap 是一个使用基于 webkit (PhantomJS) 的无头浏览器扫描 (DOM)XSS 漏洞的小工具。 这可以评估攻击向量并且几乎没有误报。 要求 安装 安装 phantomjs 命令行工具。 go get github.com/rverton/xssmap xssmap -...

    visual-regression-testing:使用PhantomCSS进行视觉回归测试

    PhantomJS ( ):PhantomJS是一个无头WebKit,可使用JavaScript API编写脚本。 它具有对各种Web标准的快速本机支持:DOM处理,CSS选择器,JSON,Canvas和SVG。 SlimerJS ( ):SlimerJS与PhantomJs相似,不同之...

    QueryList:渐进式PHP搜寻器框架!优雅的渐进式PHP采集框架

    查询清单 ...抓取JavaScript动态呈现页面(PhantomJS /无头WebKit) 图片下载到本地 模拟浏览器行为,例如提交表单表单 网络爬虫 ..... 要求 PHP> = 7.1 安装 通过Composer安装: composer requir

    seoserver:SEO Server是一种命令行工具,可运行服务器,该服务器允许GoogleBot以及其他搜寻器来搜寻Javascript繁重的网站

    Seo Server运行 (无头Webkit浏览器),它将完全渲染页面并将完全执行的代码返回给GoogleBot。 入门 1)您必须安装PhantomJs( )并链接到您的bin中,以便Seo Server可以调用它。 2)Seo Server是NPM模块,因此...

    java餐饮小程序源码-awesome-stars:我的GitHub星星的精选列表!

    系统的终端中或通过您的浏览器运行。 - H2O - 优化的 HTTP/1、HTTP/2 服务器 - 使用模拟退火进化图像 - Android 的私人信使。 - 现代 HTTP 基准测试工具 - 没有废话,简约的 HTTP 负载生成器 - 一种用于 nodejs 的...

    ant-jstestrunner:Ant 任务来自动化 JS 单元测试

    该任务使用 (一种无头 Webkit 浏览器)来打开和运行 html 单元测试文件。 任何测试失败都会(可选)导致构建失败。 注意:目前支持仅限于 。 要开始最新的 ant-jstestrunner jar 文件,请获取的并将以下代码包含在...

    复活「Resurrectio」-crx插件

    由于CasperJS是基于PhantomJS,一个无头WebKit引擎,它评估的Javascript,录制的序列不仅限于纯粹的HTML交互,有针对性的页面JavaScript支持的行为将被准确地转载。 Resurrectio还提供了一种在您的测试场景中生成...

Global site tag (gtag.js) - Google Analytics