网页抓取是指从网站中提取数据的过程。你可以通过网页浏览器手动进行抓取,也可以使用 Selenium 和 Puppeteer 等库实现自动化抓取。
Selenium 是一款开源工具,它允许您在浏览器中无需编写任何代码,即可实现 Web 应用程序的自动化测试并验证网站的功能。它还支持 Java、Python、C# 等其他编程语言。
Puppeteer 是一个用于在无头 Linux 系统上自动化执行 Chrome 浏览器测试的 JavaScript 库。Puppeteer 支持 Chrome 浏览器,并已在 Ubuntu 16.04 LTS、18.04 LTS 以及 Debian 9 Stretch/Buster/Siduction(64 位)上经过测试。
在本文中,我们将学习如何在 NodeJS 中结合 Puppeteer 使用 Selenium WebDriver,通过 Chrome 浏览器实现应用程序的自动化操作。
什么是 Puppeteer?
Puppeteer 是一个 JavaScript 库,允许您通过 puppeteer.js 控制浏览器。该库提供了一套 API,用于创建、管理和与网页交互,且无需依赖任何第三方服务。它还支持捕获鼠标事件和键盘输入,以便您与网页进行交互。
Puppeteer 是如何工作的?
Puppeteer 是一个用于控制 Chrome 的 Node.js 库。它允许您通过 JavaScript 控制浏览器,并以仅靠 HTML、CSS 和 JS 无法实现的方式与浏览器进行交互。
您可以使用它来模拟鼠标/键盘事件、截取屏幕截图、操作 DOM 元素、发送 HTTP 请求等。Puppeteer 还提供了一个 API,允许您在无需直接使用其任何 API 的情况下编写 Puppeteer 脚本。您可以在此处阅读有关该 API 的更多信息:https://github.com/puppeteerjs/puppeteer-api。
Puppeteer 解决了以下问题:如何在无法运行 JavaScript 的情况下控制浏览器?Puppeteer 允许你模拟鼠标/键盘事件、截取屏幕截图、操作 DOM 元素、发送 HTTP 请求,以及完成更多操作。此外,你还可以无需直接使用其任何 API 即可编写 Puppeteer 脚本。如果你想开发自己的 Chrome 扩展程序,并以非传统方式与浏览器交互,这将非常有用。
复杂性和自动化环境日新月异,因此一种工具未必能满足所有需求。Puppeteer 存在一些局限性。它仅支持 Chrome 浏览器。适用于 Firefox 的 Puppeteer 目前仍在开发中。
使用 Puppeteer 有哪些优势?
Puppeteer 提供了一种简便的方式,让你无需亲自编写脚本即可在浏览器中运行脚本。它操作简单、轻量且可扩展。你可以将其与任何编程语言或框架(如 NodeJS、Python、Java)配合使用。它拥有自己的 API,因此你无需为了网络爬虫而专门学习另一个 API。
使用 Puppeteer 时,您无需了解 Selenium 的工作原理,但仍可享受其所有优势:自动化、可测试性和可移植性!
使用 Puppeteer 有哪些缺点?
Puppeteer 是一个非常年轻的框架。它目前仍处于测试版,尚未支持所有浏览器(仅支持 Chrome、Firefox、Opera 和 Safari)。不过,随着时间的推移,Puppeteer 将能够支持更多的浏览器。其 API 也不如 Selenium 那样成熟,因此您在初期可能会遇到一些困难,但随着时间的推移,情况会逐渐好转。 您可以在其官方网站 puppeteerjs.com/docs/getting-started/ 上找到许多关于如何使用 Puppeteer 的示例。
如何安装 Puppeteer?
您可以通过从网站下载软件包或手动安装的方式来安装 Puppeteer。 访问 Puppeteer 代码库页面,下载适用于您操作系统的最新版本。要运行它,您的计算机上需要安装 NodeJS。如果您不知道从哪里开始,请访问此链接:nodejs.org/en/download。运行命令 `npm install -g puppet`。这将下载运行 puppetserver 所需的所有依赖项。现在,在您的主目录中打开一个终端窗口,并输入 `puppetserver`。
如果一切顺利,你应该会看到类似这样的内容:
$ node server Starting server… done! http://localhost:4200 Connecting…done! http://localhost:4200 Disconnected / Connected http://localhost:4200 <– Start scraping now!
要停止,请按 Ctrl+C,然后输入 exit。
什么是Selenium?
Selenium 是一款功能强大的工具,可用于自动化测试基于 Web 的应用程序。它通常也被称为WebDriver。Selenium 问世已有一段时间,现已成为 IT 行业中最受欢迎的工具之一。
Selenium 有什么作用?
Selenium 允许您通过执行各种操作(如点击按钮、填写表单,甚至在页面间导航)来实现网站的自动化。该软件的主要目标是让自动化测试变得简单高效,而无需您亲自编写任何代码。您可以在浏览器(Chrome/Firefox)中使用该软件,也可以在 Java、C# 或 Python 等编程语言中使用。 在计算机上安装完成后,您必须下载 Selenium 服务器,该服务器默认运行在 4444 端口。然后打开 Chrome/Firefox,在地址栏中输入 chrome://extensions,您将看到可用扩展程序的列表;选择“管理扩展程序”,然后点击“加载未打包的扩展程序”按钮。
您可以使用 Selenium 来测试网站、移动应用程序和桌面应用程序。它使用简便,即使没有编程知识,也能实现基于 Web 的应用程序的自动化测试。您还可以使用 Selenium IDE 创建自己的测试,该工具提供了一个可视化界面,让您能够以用户友好的方式开发测试。
Selenium 的优势
- 它支持所有网页浏览器(Chrome、Firefox、IE)和移动设备(Android)。Selenium 是一款跨平台工具。您只需为所选平台安装一个集成开发环境(IDE),即可开始使用该 API。您无需为每个平台学习新的 API 或不同的编程语言——只需使用一种可在所有平台上运行的语言即可。
- Selenium 支持市面上大多数编程语言,包括 Java、C#、Python 以及许多其他语言。如果你想用 JavaScript 实现自动化操作,可以使用 NodeJS 配合 selenium-nodejs。
- Selenium 支持多种框架,例如 Protractor、WebDriver 等。这些框架的最大优点在于,它们提供了一个优秀的抽象层,相比直接在浏览器中编写纯粹的浏览器自动化代码,使用这些框架能让开发变得更加轻松。 例如,如果我们希望测试在多个浏览器上同时运行,那么可以通过 selenium-webdriver 和 selenium-webdriver2 来实现。这意味着在同时测试多个浏览器时,我们不会遇到任何问题,因为一切都将由框架本身处理,而无需在每个浏览器中手动编写自定义代码(否则会导致我们的测试套件变得非常复杂)。
- Selenium 提供了许多插件,例如 Google Chrome 扩展程序、Firefox 附加组件等。还有什么?还有大量示例!这些示例不仅来自开源项目,还来自 Appium、Sauce Labs 或 Watir 等商业项目。因此,如果你想快速轻松地入门,不妨试试它们! 这些都是非常棒的工具!它们还支持异步测试,这意味着即使你的测试耗时超出预期,也不会影响其他并行运行的测试,彼此不会阻塞对方的执行流程(异步模式)。这样,我们就可以编写高效的 UI 测试,而无需担心拖慢应用程序的运行速度。
Selenium 与 Puppeteer 的市场趋势:为何值得关注?
Selenium 和 Puppeteer 的市场趋势表明,过去几年中其使用量显著增长,尤其是自 2014 年 Selenium 2 发布以来。此后,Selenium 的受欢迎程度持续攀升,这意味着在可预见的未来,其增长势头很可能将保持这一速度。
Web 测试的未来会是怎样的?
开源社区仍在不断开发新技术并改进现有技术,且短期内丝毫没有放缓的迹象。只要我们继续创新并开发新工具,就可以期待网络测试技术取得更多进步。
Web自动化工具:为什么应该使用它们?
当团队成员需要开展项目工作,或者需要借助自动化测试来测试代码库时,如果能使用 WebDriver 这样的自动化工具,对他们来说会比每次需要手动测试时都亲自尝试手动解决方案要轻松得多。
有了像 WebDriver 这样的 Web 自动化工具,你可以利用它来自动化测试,并使用不同的编程语言编写测试脚本。你还可以通过它与浏览器进行交互,测试应用程序中那些难以甚至无法手动完成的特定功能。可能性无穷无尽!
使用自动化工具将让你的工作轻松许多,它能让你为代码库编写自动化测试,而无需担心其底层的工作原理。
Selenium 还是 Puppeteer:哪一个更适合网页抓取?
这两者之间的主要区别在于,Puppeteer 在 Node.js 中运行,而 Selenium 在浏览器中运行。
您可以使用 Puppeteer 进行网页抓取和 API 测试,但它的支持范围不如 Selenium 广泛。此外,它没有内置的 UI 测试运行器,因此如果您想将其与 PhantomJS 或 NightwatchJS 等无头浏览器配合使用,就需要自行编写一个。
与 Puppeteer 相比,Selenium 获得了更多浏览器的支持,其 UI 测试运行器开箱即用,可与大多数主流浏览器(包括 Chrome)兼容。 然而,与 Puppeteer 相比,Selenium 仍缺少一些功能。值得注意的是,它缺乏用于与页面元素交互的 WebDriver API——这意味着仅使用该库,更难实现跨多个页面/域名/应用程序的复杂交互自动化(例如点击链接)。
