前言
在前端开发过程中,我们经常需要处理一些自动化的任务,比如爬取网页数据、自动提交表单等。这时候,我们就需要用到一些自动化工具了。其中,archerbot 就是一款非常优秀的 npm 包,其拥有很强的自动化能力,可以帮助我们完成许多重复且繁琐的任务。本文将详细介绍如何使用 archerbot 进行自动化处理。
安装
首先,我们需要在项目中安装 archerbot,可以使用 npm 命令进行安装。
--- ------- ------ ---------
快速入门
在安装完成后,我们就可以开始使用 archerbot 了。下面提供一个简单的示例代码:
----- --------- - -------------------- -- ------ --------- -- ----- --- - --- ----------- -- -- ------ -- ---------------- -- -------- ----- ------ ------- -- - ----- - ------- - - ------ ----- ------------------------------------ ----- ----------------------- -------- ----- ---------------------------- ----- ------------------------ -- -- ---- --------------- -- -------- - -------- ------------ --
以上代码中的 bot.task
方法用于定义一个任务。它接收两个参数:
- 任务名称:该任务的名称,用于在运行任务时进行引用;
- 处理函数:一个
async
函数,其参数是一个page
对象和一组自定义参数,用于执行具体的任务。
bot.run
方法用于运行一个任务。它接收两个参数:
- 任务名称:要运行的任务名称;
- 自定义参数:一个对象,用于向任务传递自定义参数。
运行以上代码后,程序将自动在 Google 上搜索 JavaScript,并返回搜索结果页。
API 文档
上面的示例仅仅是 archerbot 的冰山一角。下面将详细介绍它所有的 API 接口。
实例化
首先,我们需要实例化一个 Archerbot 对象:
----- --------- - -------------------- ----- --- - --- ------------------
该实例将作为整个自动化过程的基础,并提供许多方法和属性。
options
参数是一个包含一些选项的对象,可选。以下是该对象的可用选项:
headless
: 一个布尔值,表示是否以无界面模式运行浏览器。默认为 true;executablePath
: 一个字符串,表示浏览器可执行文件的路径。默认为 null,使用系统默认安装路径;args
: 一个字符串数组,用于传递命令行参数给浏览器。默认为空数组;userDataDir
: 一个字符串,表示用户数据目录的路径。默认为 null,使用系统默认目录。
网络请求
以下方法用于处理浏览器的网络请求:
1. bot.onRequest(handler)
用于监听所有的网络请求,并在每个网络请求的“请求开始”时触发回调函数。
------------------- ------ -------- -- - -------------------- -------------- --
该方法返回一个用于取消监听的函数。
----- -------------- - -------------------- -------- -- - -- --- -- -- ------ ----------------
2. bot.onResponse(handler)
用于监听所有的网络请求,并在每个网络请求的“响应完成”(即响应 body 下载完成)时触发回调函数。
-------------------- ------ --------- -- - -------------------- --------------- --
该方法返回一个用于取消监听的函数。
----- -------------- - --------------------- --------- -- - -- --- -- -- ------ ----------------
3. bot.prepareRequest(handler)
用于修改所有的网络请求,比如修改请求头、添加 cookie 等。该方法在每个网络请求发出前都会被调用一次。
------------------------ ------ -------- -- - -------------------- -------------- ----------------------------------- - ----------- --
该方法返回一个用于取消监听的函数。
----- -------------- - ------------------------- -------- -- - -- --- -- -- ------ ----------------
网页操作
以下方法用于对浏览器中的网页进行操作:
1. bot.task(name, handler)
用于定义一个新的任务,任务包含一个或多个页面操作。
----------------- ----- ------ ------- -- - ----- ------------------------------------- ----- ------------------------------ ---------------- ----- ------------------------------ ---------------- ----- ---------------------------- ----- ------------------------ --
该方法返回一个可用于调用任务的函数。
----- ------- - ----------------- ------ ------- -- - -- --- -- -- ---- --------- --------- -------- --------- ----- --
如果要定义多步任务,可以在回调函数中调用多个页面操作。
------------------ ----- ------ ------- -- - ----- ------------------------------------ ----- ----------------------- --------------- ----- ---------------------------- ----- ------------------------ ----- ----------- - ----- -------------------- --- --- -------------------------------- -- ------------- --
2. bot.get(url, options)
用于在浏览器中打开指定的网页。
----- -----------------------------------
options
参数是一个包含一些选项的对象,可选。以下是该对象的可用选项:
waitLoad
: 一个布尔值,表示是否等待页面的所有资源都加载完成后返回。默认为 true;waitSelector
: 一个 CSS 选择器,表示等待页面中指定的元素出现再返回。默认为 null。
----- ---------------------------------- - --------- ----- ------------- ------------ --
该方法返回一个 Promise
,其结果是一个 page
对象。
3. bot.delay(ms)
用于让程序延迟指定的时间(单位是毫秒)。
----- --------------- -- -- - -
4. page.type(selector, text, options)
用于向指定元素输入文本。
----- ------------------------------ -------- ----- ------------------------------ ------
options
参数是一个包含一些选项的对象,可选。以下是该对象的可用选项:
delay
: 一个数字,表示每次输入的间隔时间(单位是毫秒)。默认为 0。
----- ------------------------------ -------- - ------ --- --
5. page.click(selector, options)
用于点击指定元素。
----- -----------------------------
options
参数是一个包含一些选项的对象,可选。以下是该对象的可用选项:
button
: 一个字符串,表示要模拟的鼠标按钮。可选值为 "left"、"right"、"middle"。默认为 "left"。
----- ----------------------------- - ------- ------- --
6. page.waitFor(selectorOrFunctionOrTimeout, options)
用于等待页面中的某个元素出现。
----- ------- - ----- --------------------------- ----- ---------------------------------
selectorOrFunctionOrTimeout
参数可以是以下三种类型的之一:
- CSS 选择器,表示等待指定元素出现;
- 一个或多个 CSS 选择器的数组,表示等待这些元素出现;
- 一个回调函数,该函数返回一个布尔值,表示等待某个条件成立。
options
参数是一个包含一些选项的对象,可选。以下是该对象的可用选项:
timeout
: 一个数字,表示等待的最长时间(单位是毫秒)。默认为 30000 毫秒(即 30 秒);polling
: 一个数字,表示每隔多长时间(单位是毫秒)轮询一次判断条件是否满足。默认为 500 毫秒。
----- ----------------------- - -------- ----- -- -- --- ----- --- ----------------- ------- -- - ------------- -- - -- ----------------------------------- - --------- - ---- - -------------- - -- ------ --
7. page.waitForNavigation(options)
用于等待页面跳转完成。
----- ----------------------------- ----- ------------------------
options
参数是一个包含一些选项的对象,可选。以下是该对象的可用选项:
timeout
: 一个数字,表示等待的最长时间(单位是毫秒)。默认为 30000 毫秒(即 30 秒)。
8. page.goBack()
用于后退一页。
----- -------------
9. page.goForward()
用于前进一页。
----- ----------------
10. page.reload(options)
用于重新加载页面。
----- ------------- --------- ---- --
options
参数同 bot.get
方法的选项。
11. page.evaluate(pageFunction, ...args)
用于在浏览器页面中执行 JavaScript 代码。
----- ----- - ----- ---------------- -- ---------------
第一个参数 pageFunction
是一个 string
或 function
类型,表示要在页面中执行的代码。如果该参数是一个字符串,则将其作为可执行的 JavaScript 代码。如果该参数是一个函数,则将其转换为字符串,并将其作为可执行的 JavaScript 代码。该方法支持传递任意数量的其他参数,这些参数会被传递给 pageFunction
。
----- ------------------------- -- - ------ - - - -- -- -- -- -- -
需要注意的是,由于 JavaScript 是运行在浏览器内部,所以在 pageFunction
内部无法直接访问 Node.js 的全局变量,比如 module
、require
等。如果要访问这些变量,需要使用 window
对象,结合浏览器插件等方式进行封装。
12. page.$(selector)
用于查找页面中的一个元素。
----- ------ - ----- -----------------------
该方法返回的是一个 Promise
对象,结果是一个 ElementHandle
对象,表示查找到的元素。如果找不到指定的元素,结果为 null
。
13. page.$$(selector)
用于查找页面中的所有符合条件的元素。
----- ----------- - ----- -------------------- --- ---
该方法返回的是一个 Promise
对象,结果是一个 ElementHandle
对象的数组,表示符合条件的所有元素。如果找不到任何元素,结果为空数组。
14. ElementHandle.click(options)
用于模拟点击元素。
----- ------ - ----- ----------------------- ----- --------------
options
参数同 page.click
方法的选项。
15. ElementHandle.type(text, options)
用于向元素输入文本。
----- ----- - ----- --------------------------- ----- -----------------
options
参数同 page.type
方法的选项。
16. ElementHandle.press(key, options)
用于模拟键盘按键。
----- ----- - ----- --------------------------- ----- ------------------ ----- ------------------------
key
参数是一个表示按键的字符串,比如 "Enter"、"ArrowLeft" 等。options
参数同 page.type
方法的选项。
总结
archerbot 是一个非常强大的自动化工具,既简单易用又功能强大。本文仅仅介绍了其大部分 API 接口,更高级的用法还需要读者自行探索。在使用过程中,需要注意合法使用,不要用于非法用途。
来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/90496