npm 包 archerbot 使用教程

阅读时长 13 分钟读完

前言

在前端开发过程中,我们经常需要处理一些自动化的任务,比如爬取网页数据、自动提交表单等。这时候,我们就需要用到一些自动化工具了。其中,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 是一个 stringfunction 类型,表示要在页面中执行的代码。如果该参数是一个字符串,则将其作为可执行的 JavaScript 代码。如果该参数是一个函数,则将其转换为字符串,并将其作为可执行的 JavaScript 代码。该方法支持传递任意数量的其他参数,这些参数会被传递给 pageFunction

需要注意的是,由于 JavaScript 是运行在浏览器内部,所以在 pageFunction 内部无法直接访问 Node.js 的全局变量,比如 modulerequire 等。如果要访问这些变量,需要使用 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