我们使用联盟链接。它们让我们能够维持运营,而您无需承担任何费用。

什么是无头浏览器?

没有头=更少的开销。

什么是无头浏览器缩略图

无头网络浏览器可帮助开发人员使用自动化脚本快速测试应用程序和网站。但它们也发挥着作用 网络抓取,而且它每年都变得越来越重要。本文将教您什么是无头浏览器,它如何允许抓取复杂的网站,以及哪种无头网络浏览器最适合您的项目。

您还可以通过视频格式观看本指南:

什么是无头浏览器?

无头浏览器是 没有用户界面的 Web 浏览器基本上,它与我们通常使用的 Chrome 或 Firefox 相同,只是去掉了可以点击或触摸的部分:没有标签栏、URL 栏、书签或任何其他用于视觉交互的元素。 

相反,这样的浏览器 希望你通过编程方式与其交互,即通过编写脚本来指示其应如何操作。以这种方式与内容交互不会影响功能:您仍然可以模拟点击、滚动、下载以及执行通常使用鼠标执行的所有相同操作。 

你可能会问,何必呢?无头浏览器 方便执行重复任务,例如软件测试和网页抓取。无论如何,这些都是您想要自动化的任务。而且无需加载不必要的视觉元素可以节省大量资源。 

无头浏览器有何用途?

无头浏览器 用于通过用户的眼睛模拟与网站或应用程序的交互。为此,他们主要依赖 JavaScript 元素,如今这些元素几乎可以完全控制网站。
  • 网络测试 – 无头浏览器的主要用例可能是测试基于 Web 的网站和应用程序。您可以将其配置为单击链接和各种元素、在字段中输入数据、填写表单、模拟负载,甚至执行完整的工作流程。这可以帮助开发人员查看网站是否存在他们可能通过手动测试或其他工具遗漏的任何错误或可用性问题。
  • 网页抓取  - 与 JavaScript 如此流行,使用常规 HTML 提取工具抓取某些网站变得非常困难。其中一些问题包括异步加载、无限滚动和浏览器指纹识别。通过完全呈现网站并模拟真实浏览器,无头浏览器允许网络抓取工具从最具挑战性的目标中提取数据。

使用无头浏览器进行无头测试

无头测试是一种使用无需图形用户界面 (GUI) 的浏览器对 Web 应用程序运行自动化测试的方法。 

在此模式下,浏览器会执行在可见会话中执行的所有操作,例如加载页面、渲染 JavaScript、与元素(表单、按钮)交互,而不会在屏幕上实际显示界面。无头测试对开发人员很有用,因为与使用完整浏览器窗口进行测试相比,它速度更快、更节省资源。

这种测试方法有助于验证 Web 应用程序是否能在不同的浏览器上正常运行,确保机器人(即网络爬虫或抓取工具)能够正确浏览网站,并检查应用程序是否能顺利运行且不会损失功能。

无头浏览器如何帮助网页抓取

说到网页抓取,无头浏览器 对项目的成功来说要么无关紧要,要么至关重要。这完全取决于您要访问的网站。

如果该网站不依赖 JavaScript 元素来显示内容,或者不使用基于 JS 的跟踪方法来阻止网络抓取工具,则您不需要无头浏览器。在这种情况下,常规的网络抓取应用程序或库(如 Requests 和 Beautiful Soup)可以更快、更轻松地完成工作。

但是,如果您处理的是动态 AJAX 页面或嵌套在 JavaScript 元素中的数据,那么无头浏览器将是提取所需信息的最佳选择。这是因为您需要像真实用户一样呈现整个页面,而常规 HTML 抓取工具不包含此类功能。 

无头浏览器的另一个重要用途是 克服浏览器指纹识别。这是一个全新的问题,涉及屏幕分辨率、时区、IP 地址、JavaScript 配置等参数。复杂的网站使用指纹来跟踪用户并阻止网络抓取机器人。使用无头浏览器,您的抓取工具可以模拟真实设备的指纹。 

使用无头浏览器进行网页抓取的利与弊

无头浏览器通过模拟真实用户与网站的交互,为网页抓取项目提供了许多优势。这使得抓取工具能够浏览 JavaScript 内容繁多的网站,而传统的基于 HTTP(非动态)的方法可能无法满足这些需求。

像工具一样 or 剧作家 允许网络抓取工具加载和处理动态内容、点击按钮、滚动、键入或与表单交互,这对于依赖 JavaScript 呈现元素的抓取网站至关重要。此外,由于它们可以模仿真实的用户行为,反机器人保护系统不太可能检测到您的抓取工具。

然而,无头浏览器也有一些缺点。虽然这些工具可以通过模仿人类行为来避开机器人检测系统,但并不能保证它们不会被检测到。强大的保护服务,如 Cloudflare 仍然可以注意到自动活动。您必须将无头浏览器与 旋转代理 使得请求更加自然。

此外,无头浏览器通常比其他抓取方法更耗费资源。这意味着您需要更多的内存和处理能力,这会降低性能并增加成本,尤其是对于大型项目而言。

为任务选择最佳的无头浏览器库

如果您决定尝试使用无头浏览器进行网页抓取,则有多种选项可供选择。以下是一些主要选项: 

在 Selenium 中运行任何无头浏览器

Selenium 是一个开源自动化工具。它的主要目的是执行自动化测试,但 Selenium 也可用于网页抓取。该工具允许使用多种编程语言(包括 Python、Java、Ruby 和 C#)为所有主流网页浏览器(Chrome、Firefox、Opera、Edge 和 Safari)编写脚本。Selenium 速度不是很快,而且它不是为抓取网页而设计的,但它仍然是控制无头浏览器的流行工具。

尝试新的多引擎无头 API – Playwright

剧作家 是一个相对较新的用于控制无头浏览器的 node.js 库。它由 Microsoft 维护。与 Selenium 一样,Playwright 支持页面导航、输入事件、下载和上传数据、模拟移动设备等。该库的最大优势是它可以模拟所有三大浏览器组:Chromium、Firefox 和 WebKit。 

使用 Puppeteer 控制 Headless Chrome

Puppeteer 是一个用于控制无头 Chrome(以及最近的 Firefox)的 node.js 库。它由 Chrome 的开发人员构建,因此该库维护良好,并且与其“puppet”浏览器具有良好的兼容性。Puppeteer 允许抓取页面、点击元素、下载数据、使用 代理等等。它已成为控制网页抓取中无头浏览器的最流行选项之一。 

Puppeteer 还有一个用于 Python 的姊妹库,名为 Pyppeteer。不过,它是非官方的,因此您可能无法获得相同的功能或支持。 

代理服务器作为房屋

关于无头浏览器的常见问题

无头模式意味着相关软件在没有图形用户界面的情况下运行。

是的。一些使用 Python 控制无头浏览器的库是 Selenium 和 Pyppeteer。

是的。该功能已于 2020 年上半年实现。 

Adam Dubois 的图片
亚当·杜波依斯
代理极客和开发人员。