`
xtuhcy
  • 浏览: 142524 次
  • 性别: 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无界面浏览器

    首先,你需要在Python环境中安装Selenium库,然后可以创建一个PhantomJS驱动器来启动无头浏览器。下面是一个简单的示例: ```python from selenium import webdriver # 创建PhantomJS浏览器实例 driver = ...

    phantomjs-2.1.1-macosx.zip

    PhantomJS是一款强大的Web自动化和屏幕抓取工具,尤其适合于网页爬虫和无头浏览器的场景。"无头浏览器"意味着它可以在没有用户图形界面的情况下运行,这对于自动化测试、数据抓取和性能分析非常有用。PhantomJS基于...

    HeadlessBrowsers:存在的(几乎)所有无头Web浏览器的列表

    3. **PhantomJS**:基于WebKit的无头浏览器,已停止更新,但仍被广泛使用。 4. **Puppeteer**:Google Chrome团队开发的Node.js库,用于控制Headless Chrome或Chromium,进行自动化测试和网页抓取。 5. **Selenium...

    phantomjs html转pdf 完美版本

    PhantomJS是一个基于Webkit的无头浏览器,它允许开发者在没有用户图形界面的情况下执行JavaScript,这使得它在自动化测试、网页抓取以及HTML到PDF转换等领域非常有用。本资源提供的"phantomjs html转pdf 完美版本"是...

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

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

    phantomjs-2.1.1 for windows

    PhantomJS是一个基于Webkit内核的无头浏览器,它主要用于自动化测试、网页截屏、网页内容抓取等场景。这个资源是 PhantomJS 的2.1.1版本,专为Windows操作系统设计。由于官方下载速度可能较慢,此处提供了一个方便的...

    phantomjs-2.1.1-windows

    PhantomJS是一个基于Webkit内核的无头浏览器,它允许开发者通过JavaScript API来控制浏览器进行自动化测试、页面渲染和网络请求等任务。这个“phantomjs-2.1.1-windows”压缩包包含了适用于Windows操作系统的...

    phantomjs压缩包

    PhantomJS是一个强大的工具,它在IT行业中被广泛应用于网页抓取、自动化测试以及无头浏览器操作等场景。它的核心是基于WebKit的JavaScript API,允许开发者通过JavaScript来控制浏览器的行为,执行一系列自动化任务...

    phantomjs-2.1.1

    PhantomJS是一个基于Webkit内核的无头浏览器,它允许开发者通过JavaScript接口来控制浏览器进行自动化测试、网页抓取等任务。版本2.1.1是其在2015年发布的一个稳定版本,提供了许多改进和修复,使得这个工具在当时...

    phantomjs-window和Linux双版本

    PhantomJS是一款基于Webkit内核的无头浏览器,它主要用于自动化测试、网页截屏、网页内容抓取以及PDF生成等场景。这个压缩包包含了PhantomJS在Windows和Linux两个操作系统上的版本,使得用户能够在不同的平台上灵活...

    phantomjs自动化测试demo

    PhantomJS是一款基于Webkit内核的无头浏览器,它被广泛用于自动化测试、网页截屏、网络监控等场景。这个“phantomjs自动化测试demo”是一个实例,展示了如何使用PhantomJS进行自动化测试。 首先,我们需要理解...

    phantomjs - windows

    PhantomJS是一个开源的Webkit库,主要用于自动化网页抓取、屏幕截图以及无头浏览器测试。在Windows操作系统中,PhantomJS提供了一种方便的方式来处理JavaScript驱动的网页内容,而无需打开一个完整的浏览器实例。这...

    linux 开源爬虫开发包phantomjs

    PhantomJS是一款基于Webkit内核的开源无头浏览器,专为自动化测试、网页截图、网络监测以及网页爬虫等任务而设计。在Linux环境中,它提供了在命令行上运行JavaScript的能力,使得开发者无需通过完整的GUI界面即可...

    Python3+PhantomJS登陆网站

    - "Phantom JS":这是关键的辅助工具,一个基于WebKit的无头浏览器,可以执行JavaScript,用于模拟用户操作,比如网页登录。 根据这些信息,我们可以详细讨论以下几个知识点: 1. **Python3**:Python是一种高级...

    phantomjs-windows-2.1.1

    PhantomJS是一个基于Webkit内核的无头浏览器,它主要用于自动化测试、网页截屏、网页内容抓取等任务。这个名为"phantomjs-windows-2.1.1"的压缩包文件,很显然是PhantomJS在Windows平台上的2.1.1版本。在这个版本中...

    phantomjs-2.5.0-beta-windows

    PhantomJS是一个基于Webkit内核的无头浏览器,它主要用于自动化测试、网页截屏、网页内容抓取等任务。2.5.0-beta版本是PhantomJS的一个预发布版本,针对Windows操作系统进行了优化和适配。这个压缩包文件包含了在...

    phantomjs-2.1.1-windows.zip

    1. **无头浏览器**:PhantomJS作为一个无头浏览器,意味着它没有图形用户界面,可以在后台运行,非常适合自动化测试和脚本执行。 2. **Webkit支持**:由于PhantomJS基于Webkit,它能渲染网页与现代浏览器相同,确保...

    phantomjs 2.1.1-windows版

    PhantomJS是一个开源的Webkit库,它提供了一个无头浏览器环境,可以在命令行界面下运行JavaScript代码,执行网页自动化任务。这个“phantomjs 2.1.1-windows”版本是专为Windows操作系统设计的,它包含了所有必要的...

    PhantomJS Cookbook

    《PhantomJS Cookbook》是关于PhantomJS的官方手册,主要涵盖了如何利用这个无头浏览器进行Web自动化测试、网页截屏、页面渲染等任务。PhantomJS是一个基于Webkit的服务器端JavaScript API,它允许开发者在没有真实...

Global site tag (gtag.js) - Google Analytics