简介
run-headless
是一个利用 headless 浏览器执行脚本的 npm 包,可以在无需打开浏览器的情况下执行 JavaScript 脚本并生成包含结果的截图。该工具可以解决在前端开发中需要进行浏览器测试、爬虫等依赖浏览器环境的任务的问题,并且具有方便、高效、易用等特点,因此备受开发人员们的青睐。本文将结合实例详细介绍如何使用 run-headless
。
安装
run-headless
可以通过 npm 进行安装,安装时需要保证已经安装了 Node.js。使用如下命令进行安装:
npm install run-headless
使用
在代码中引入 run-headless
模块,然后新建实例,即可以使用该工具。
const runHeadless = require('run-headless'); const runner = runHeadless();
在定义 runner 实例时,可以选择四个参数来自定义运行环境:
executablePath
: 设置 headless 浏览器的路径。ignoreHTTPSErrors
: 是否忽略 https 错误。args
: 命令行参数传递。defaultViewport
: 默认视图端口大小。
下面将介绍几个具体的应用场景。
截图
run-headless
可以很容易地获取网页的截图,只需要使用 screenshot
函数,指定网页地址和保存路径即可:
await runner.screenshot('https://www.baidu.com/', './baidu.png');
这个例子将百度页面截图并保存到了本地,保存路径为 ./baidu.png
。
获取数据
在实际的开发中,需要获取网页中的某些数据是很常见的需求。比如,需要从一个分页列表中获取所有的页面网址链接。run-headless
可以很好的满足这个需求。只需要通过 evaluate
函数,在 headless 浏览器中执行一个 JavaScript 脚本,然后将结果返回,即可获取到所需的数据:
const urls = await runner.evaluate(() => { const urls = []; [...document.querySelectorAll('.pagination a')].forEach(a => { urls.push(a.href); }); return urls; });
上面的代码会在 headless 浏览器中找到所有分页链接的 <a>
标签,然后将链接地址传回执行脚本的 Node.js 环境。
自动化测试
自动化测试是前端开发过程中非常重要的一个环节。run-headless
也可以很好地解决这个问题。使用 page
函数,可以在 headless 浏览器中打开一个网页,并获取到操作浏览器的句柄,从而实现自动化测试。
const handle = await runner.page('https://www.baidu.com/'); await runner.click(handle, '#s-usersetting-top'); // 点击用户设置 await runner.waitFor(handle, '#wrapper_wrapper'); // 等待页面加载完成 await runner.type(handle, '#TANGRAM__PSP_8__userName', 'username'); // 输入用户名 await runner.type(handle, '#TANGRAM__PSP_8__password', 'password'); // 输入密码 await runner.click(handle, '#TANGRAM__PSP_8__submit'); // 提交表单
上述代码演示了在百度页面进行自动登录的过程。
总结
本文介绍了 npm 包 run-headless
的基本使用,包括安装、截图、数据获取、自动化测试等常见场景,希望能够帮助读者解决前端开发中遇到的相关问题。run-headless
是一个方便、高效、易用的工具,在前端开发中有着广泛的应用前景。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/5ef1d4fa8c4ce90ee4ca3b38