简介
Headless 是一个基于 Chrome DevTools 协议的 Node.js 库,它提供了一种在无头浏览器(Headless Browser)中自动执行 DOM 操作的方式,可用于爬虫、自动化测试等场景。
本文将介绍如何使用 npm 包 Headless,包括安装、配置、常用 API 的使用方法,并提供示例代码供读者参考。
安装
首先需要在项目中安装 Headless:
--- ------- --------
安装完成后即可在项目中引入 Headless:
----- - -------- - - -------------------
配置
启动 Headless
启动 Headless 实例之前,需要先启动一个运行在端口 9222 的 Chrome 实例。可以通过以下命令启动:
------------- ---------------------------- -------------- -------------------------- ------------------- -------------
其中 google-chrome
是 Chrome 的可执行文件路径,具体路径根据系统不同而有所差异。通过该命令启动的 Chrome 实例会监听来自 127.0.0.1:9222 的远程调试请求。
如果需要在 Node.js 中自动启动 Chrome 实例并连接到 Headless,可以使用 chrome-launcher 包。具体用法请参考其文档。
配置 Headless
启动 Headless 实例时可以传入一些配置项,包括 Chrome 连接地址和窗口大小等。以下是一个示例:
----- -------- - --- ---------- --------- ------------------------ ------- ----- ------ ----- --
API
初始化
在启动 Headless 实例后,需要先调用 init
方法初始化实例:
----- ---------------
打开页面
使用 openPage
方法打开指定 URL 的页面:
----- --------------------------------------------
查找元素
Headless 提供了多种查找元素的方式,包括按 ID、按选择器、按文本内容等。以下是一些常用的方法:
findById(id: string): ElementHandle | null
: 按 ID 查找元素。findBySelector(selector: string): ElementHandle | null
: 按选择器查找元素。findByText(text: string): ElementHandle | null
: 按文本内容查找元素。
例如,以下代码会找到 ID 为 my-div
的元素并获取其文本内容:
----- ------- - ----- --------------------------- ----- ---- - ----- ---------------------
执行脚本
使用 evaluate
方法执行 JavaScript 脚本,并返回结果:
----- ------ - ----- -------------------- -- - ------ -------------- -- ------------------- -- ------
模拟操作
使用 typeInput
和 clickElement
方法模拟用户的输入和点击操作:
----- ----- - ----- ------------------------------------ ----- ------------------------- ------ ------- ----- ------ - ----- ----------------------------- ----- -----------------------------
关闭页面和 Headless 实例
使用 closePage
方法关闭当前页面:
----- --------------------
使用 exit
方法关闭 Headless 实例:
----- ---------------
示例代码
以下是一个使用 Headless 实现自动登录 GitHub 的示例代码:
----- - -------- - - ------------------- ----- -------- - --- ---------- --------- ------------------------ -- ----- -------- ------- - --- - ----- --------------- ----- --------------------------------------------- ----- ------------- - ----- --------------------------------------- ----- ------------- - ----- ------------------------------------ ----- ------------ - ----- ---- ----------------------------------------------------------- ---------- ---------------------------------------------------------------------------------------