词汇表

什么是无头浏览器?

无头浏览器是一种在没有图形用户界面的情况下运行的真实网络浏览器,通过Chrome DevTools Protocol或WebDriver等API以编程方式控制,用于自动化测试、爬取和渲染JavaScript密集型页面。

了解为什么无头Chrome/Firefox是爬取JavaScript渲染网站的标准,以及流行的驱动程序(Playwright、Puppeteer、Selenium)和指纹权衡。

详解

无头浏览器是一种普通浏览器(Chrome、Firefox、WebKit),以无可见窗口的方式运行,通过程序化 API 提供导航、DOM 交互和渲染能力。它能执行 JavaScript、应用 CSS、处理 Cookie,行为与常规浏览器无异——唯一的区别在于没有 UI 窗口,也没有人工输入。

在爬取场景中,只要目标数据是由 JavaScript 在客户端渲染的,就必须使用无头浏览器。现代 Web 应用(React、Vue、Angular SPA)通常返回一个空的 HTML 外壳,待 JS 执行后才填充内容;像 `requests` 或 `axios` 这样的纯 HTTP 客户端只能获取到空外壳。无头浏览器会执行完整的页面生命周期,从而提供完全渲染后的 DOM。

主流驱动工具包括 Playwright(微软出品,支持多浏览器)、Puppeteer(谷歌出品,支持 Chrome/Firefox)以及 Selenium(较早的基于 WebDriver 的方案,语言支持最广)。每种工具都提供导航、点击、输入、等待元素、拦截网络请求和提取内容等方法。对于需要模拟真人操作的自动化任务,无头浏览器搭配隐身插件和住宅代理是业界标准方案。

工作原理

当您通过 Playwright/Puppeteer/Selenium 启动无头浏览器时,驱动程序会以 `--headless` 标志启动一个真实的 Chromium(或 Firefox/WebKit)进程,并通过调试协议与其连接(Playwright/Puppeteer 使用 Chrome DevTools Protocol,Selenium 使用 WebDriver)。您的脚本通过该协议发送命令——`page.goto`、`page.click`、`page.evaluate`——浏览器会像真实用户操作一样执行这些命令。

浏览器会处理真实浏览器所做的一切:TLS 握手(使用其自身的指纹)、HTTP/2 或 HTTP/3 协商、Cookie 存储、JavaScript 执行、布局、渲染以及子资源的网络请求。您的脚本可以拦截其中任何环节,修改请求/响应,注入脚本,并从渲染后的 DOM 中提取数据。

类型

Playwright

微软推出的现代多浏览器驱动程序。支持Chromium、Firefox和WebKit。API设计最佳,内置等待机制、网络拦截和跨浏览器测试。新项目的默认选择。

Puppeteer

谷歌的仅支持Chrome的无头驱动程序。成熟、文档完善,适合纯Chromium工作流。比Playwright更轻量,但仅限于Chromium系列浏览器。

Selenium WebDriver

三者中历史最悠久,语言支持最广(Python、Java、C#、Ruby等)。对于爬取而言,其人机工程学不如Playwright/Puppeteer,但是跨浏览器测试的标准工具。

隐身补丁无头浏览器

带有反检测补丁的无头浏览器:puppeteer-extra-plugin-stealth、playwright-extra/stealth、undetected-chromedriver。屏蔽默认无头特征(navigator.webdriver、缺失的插件列表、默认User-Agent)。

常见使用场景

爬取JavaScript渲染的页面(SPA、动态内容)
自动化端到端测试
将页面渲染为PDF或截图
爬取需要登录或交互的网站
表单提交和多步骤工作流
生成用于视觉回归测试的基准截图
常见问题

常见问题

关于以下内容的常见问题 无头浏览器.

当你想要的数据由JavaScript渲染时,当你需要在提取数据前与页面交互(点击、输入、滚动)时,或者当网站使用需要真实JS引擎才能通过的客户端反机器人挑战时。对于静态HTML页面,普通HTTP客户端更快更轻量。