详解
无头浏览器是一种普通浏览器(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 中提取数据。