对比selenium、phantomjs、puppeteer

Web的辅助工具,主流的有selenium、phantomjs以及puppeteer这三者,本节就来详细的介绍一下它们的优势和短板。

1. Selenium

Selenium是一款开源的自动化测试工具,很多编程语言,Python语言也支持。而且支持非常多的浏览器,例如Chrome、Firefox等。
Selenium 测试直接在浏览器中运行,就像真实用户所做的一样。Selenium 测试可以在 Windows、Linux 和 MacOS上的 Chrome和 Firefox 中运行。其他测试工具都不能覆盖如此多的平台。使用 Selenium 和在浏览器中运行测试还有很多其他好处。
Selenium完全开源,对商业用户也没有任何限制,支持分布式,拥有成熟的社区与学习文档
优势:

  • Selenium开源,文档多,长期维护更新。
  • 跨平台,支持Windows、MacOS、Linux
  • Selenium直接驱动浏览器,支持chrome、firefox等大部分浏览器。
  • Selenium开源,操作简单,轻松实现复杂操作。
  • 支持Web移动网页的测试。

劣势:

  • 安装略麻烦,需要Selenium库、浏览器【例如Chrome】以及浏览器的驱动程序。
  • 加载慢,因为是驱动浏览器,所以会加载页面内容,例如图片、字体、静态资源css js文件等。
  • Selenium驱动的浏览器特征明显,爬虫使用Selenium容易被封。

    2. phantomjs

    PhantomJS是一个基于webkit的JavaScript API。
    它使用QtWebKit作为它核心浏览器的功能,使用webkit来编译解释执行JavaScript代码。任何你可以在基于webkit浏览器做的事情,它都能做到。
    它不仅是个隐形的浏览器,提供了诸如CSS选择器、支持Web标准、DOM操作、JSON、HTML5、Canvas、SVG等,同时也提供了处理文件I/O的操作,从而使你可以向操作系统读写文件等。
    PhantomJS的用处可谓非常广泛,诸如网络监测、网页截屏、无需浏览器的 Web 测试、页面访问自动化等。
    优势:

  • 没有界面,网站加载到内存并执行页面上的JavaScript,所以运行起来比完整的浏览器更高效。

劣势:

  • 只支持JS语言
  • 不支持flash,没法处理视频网站的测试。
  • 暴露的底层api太少。
  • 目前已经停止开发。

    3. Puppeteer

    Puppeteer 是 Chrome 开发团队在 2017 年发布的一个 Node.js 包,用来模拟 Chrome 浏览器的运行。
    Puppeteer 是 Node.js 工具引擎,提供了一系列 API,通过 Chrome DevTools Protocol 协议控制 Chromium/Chrome 浏览器的行为。
    默认情况下是以 headless 启动 Chrome 的,也可以通过参数控制启动有界面的 Chrome。
    Puppeteer 默认绑定最新的 Chromium 版本,使用时自动下载,也可以自己设置不同版本的绑定。
    优势:

  • 在无界面的环境中运行 Chrome。

  • 通过命令行或者程序语言操作 Chrome。
  • 自身是nodejs库,所以支持js语法。
  • python有库支持Puppeteer,库名Pyppeteer,本质是Puppeteer的python语法接口

劣势:

  • puppeteer本质是通过开发者接口操作chromium浏览器。
  • chrome虽然优秀但同样问题不少,puppeteer也就跟着会有些小毛病。
  • 国内安装puppeteer,由于自动下载chromium的问题,很容易出错。