浏览器完全自动化开源 CLI 工具Beachpatrol


Beachpatrol:浏览器终端用户自动化CLI中心。释放在线生活任务的全部潜力

简介

Beachpatrol 是一个 CLI 工具,旨在替代并自动化您的日常网页浏览器。

https://github.com/sebastiancarlos/beachpatrol/assets/88276600/bc3bf9e8-28e2-48ef-a1f4-8754b4918916

运行 beachpatrol 可启动 Chromium 或 Firefox 浏览器,并通过 Playwright 脚本进行外部控制。您可以将其作为日常浏览器使用,其功能与普通浏览器无异。

您还可以使用 beachpatrol --profile <profile-name> 启动特定配置文件,或使用 beachpatrol --incognito 进入无痕模式。

要实现自动化,请在 beachpatrol/commands 文件夹中创建一个自定义的 Playwright 脚本。然后运行 beachmsg <script-name> [<argument>...],脚本将被执行。您可以使用 Playwright API 在当前聚焦的标签页上操作,切换到现有标签页,打开新标签页,或使用无头标签页。

如果您不想频繁切换到 CLI 来操作浏览器,可以安装 beachpatrol-browser-extension。其用户界面允许您选择命令并传入参数,通过浏览器扩展的 Native Messaging 功能调用 beachmsg。此外,界面会高亮适用于当前 URL 的命令,为常见场景(如分页和下拉菜单)提供 GUI 元素,并支持快捷键

您可以用 Beachpatrol 自动化什么?一切皆有可能:

  • 检查电子邮件。
  • 查看银行交易记录。
  • 从网站下载文件。
  • 将当前标签页的文本导出到文件。
  • 填写在线表单。
  • 检查社交媒体或工作通讯平台的消息。
  • 与操作系统集成:将浏览器任务添加到 Bash/Python 脚本中。
  • 所有这些功能都可在您的日常浏览器中实现!

要求

  • Linux(Wayland 或 X11)、macOS 或 Windows
  • Node.js 和 NPM
  • Chromium 或 Firefox(Playwright 会自动安装)

安装

  • 克隆仓库:git clone https://github.com/sebastiancarlos/beachpatrol
  • 进入文件夹:cd beachpatrol
  • 运行 npm install 安装依赖。
  • 运行 make 安装可执行文件的符号链接(默认安装到 /usr/local/bin,该路径应在您的 PATH 中)。
    • 在 Windows 上,可以运行 npm install -g . 全局安装。

示例

  • 运行 beachpatrol 启动浏览器。
    • 可选:使用 beachpatrol & 在后台运行。
  • 将其作为常规浏览器使用。
    • 注意:由于 Chromium 的限制,目前无法通过浏览器内置功能切换配置文件,但未来可能会修复。
    • 按需安装浏览器扩展。
    • 关闭后重新运行 beachpatrol,您仍会保持所有网站的登录状态。
    • 如需使用其他配置文件,运行 beachpatrol --profile new-profile-name
  • 运行 beachmsg smoke-test 执行预装的测试命令,完成经典的 Selenium 冒烟测试。
  • 如果显示 “Form submitted”,则表示运行成功。
  • 现在您可以创建自己的自动化命令了!

编写第一个命令

假设您想自动化网页搜索,可以在 commands/search.js 文件中(相对于克隆的仓库目录)添加以下内容:

ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineexport default async (context, ...searchTerms) => {  const page = await context.newPage();  await page.goto(    `https://www.google.com/search?q=${encodeURIComponent(searchTerms.join(" "))}`,  );};

每个 Beachpatrol 命令必须导出一个默认的异步函数,作为命令的入口点。

该函数应接收:

  • Playwright 浏览器上下文作为第一个参数,
  • 以及命令的参数(如果有)。

然后,您可以通过与 BrowserContext API 交互来自动化浏览器操作。

上述 search.js 命令会打开一个新标签页(context.newPage()),执行任务后将其保持为焦点。其他命令可能针对当前聚焦的标签页操作,或要求特定标签页已打开。具体实现取决于您的需求,您可以自由设计命令。

运行以下命令执行新命令:

ounter(linebeachmsg search "您的搜索关键词"

提示:您可以编辑命令文件并重新运行,无需重启 beachpatrol 服务器!更改会自动生效。

您还可以参考内置的 commands/smoke-test.js 命令获取灵感。

技术细节

首先,beachpatrol 包含一个定制的 Playwright 脚本来启动浏览器。它传递的参数尽可能还原非自动化浏览器的体验。例如,它不会设置固定视口(这是 Playwright 自动化测试的默认行为)。

Beachpatrol 还安装并加载了 patchrightplaywright-extra 和 puppeteer-extra-plugin-stealth 包。这些工具用于隐藏浏览器的自动化特征,这是实现基本功能(如 Google 登录)的必要条件。

当然,这些工具与网站防爬措施之间存在持续的博弈。因此,它们可能随时失效。Beachpatrol 承诺会在必要时采用新的反检测技术,并鼓励用户遵守各网站的服务条款。

目前,patchright 是完成此任务的最佳工具之一,但它不支持 Firefox。对于 Firefox,我们使用 puppeteer-extra-plugin-stealth,可能会遇到 Cloudflare 误报或额外的 Google 验证码等问题。

浏览器启动后,会监听 UNIX 套接字 beachpatrol.sock,接收来自 beachmsg 的消息。

使用方法


用法:beachpatrol [--profile <profile_name>] [--incognito] [--headless]
- 使用指定配置文件启动浏览器。- 打开套接字以监听命令。可通过 'beachmsg' 命令发送命令。
选项:  --profile <profile_name>  使用指定配置文件。默认:default  --browser <browser_name> 使用指定浏览器。默认:chromium      支持的浏览器:chromium, firefox  --incognito              以无痕模式启动浏览器。  --headless               以无头模式启动浏览器。  --help                   显示帮助信息。

用法:beachmsg <command> [args...]
- 向控制浏览器的 beachpatrol 服务器发送命令。- 提供的命令必须存在于 beachpatrol 的 "commands" 目录中。
选项:  --help                   显示帮助信息。

常见问题

声称浏览器无法自动化是否有些夸张?

当我们说浏览器无法自动化时,我们更多是在思考像 Bash、Vim 或 Emacs 这样的工具所提供的深度自动化能力(在这些工具中,几乎每个交互都可以轻松编写脚本并无缝集成到自定义工作流中)。

我们承认现有的自动化工具(如自动填充、鼠标键盘宏、书签脚本、扩展以及 Playwright 等工具)可以实现部分功能。

Beachpatrol 旨在为现有技术带来新的视角,将自动化工具重新构想为日常浏览的一部分,而不仅仅是一次性任务。就像您喜爱的 Shell 或可扩展文本编辑器一样。

简而言之,我们的目标是将现有的自动化工具(目前主要用于测试或爬取)调整为适合日常浏览的工具,并提供简单且对高级用户友好的 UI。

但 Beachpatrol 不就是 Playwright 浏览器的封装吗?

确实如此,但它提供了多项增值功能:

  • 反自动化检测:Beachpatrol 精心选择 Playwright 选项和插件,以模拟常规浏览器的行为,帮助规避网站用于识别和阻止自动化浏览器的检测机制。
  • 客户端/服务器架构beachpatrol 启动浏览器并监听套接字,独立的客户端 beachmsg 可用于向受控浏览器发送 Playwright 命令。这种分离提供了更大的灵活性和与其他工具的集成能力。
  • 浏览器扩展:配套的浏览器扩展设计用于与套接字通信并发送命令,提供用户友好的图形界面和上下文工具。

为什么选择 Playwright 而非 Selenium?

初始的浏览器启动基准测试表明,Playwright 更具优势。

浏览器
启动时间
Playwright Chrome
1.7s
Selenium Node Chrome
1.8s
Selenium Java Chrome
4s
Playwright Firefox
4.3s
Selenium Java Firefox
6s
Selenium Node Firefox
9s

为什么选择 JavaScript/Node.js 而非 Python?

尽管 Python 是网页自动化的热门语言,但我们选择 JavaScript 以实现与浏览器扩展的代码共享。

为什么使用外部自动化工具(Playwright)而非浏览器扩展?

类似功能确实可以通过用户脚本管理器(如 Violentmonkey 浏览器扩展)实现。

但 Beachpatrol 允许我们从操作系统和浏览器扩展两端控制浏览器,且我们的优先级是操作系统。此外,浏览器扩展与操作系统的交互存在限制。因此,Playwright 是更自然的选择。

此外,虽然从扩展控制浏览器是可能的,但 Manifest v3 移除了执行第三方代码字符串的能力。流行的自动化扩展(如 Greasemonkey 和 Tampermonkey)可能也会受到 Manifest v3 的影响。替代方案是将代码嵌入扩展,但这需要在每次更改后重新打包扩展。虽然存在一些变通方法,并且未来可能有 Manifest v3 解决方案,但这条路径充满挑战。

相比之下,鉴于企业对传统浏览器测试的需求,Selenium 及相关工具更可能在可预见的未来继续工作。

Beachpatrol 与书签脚本相比如何?

书签脚本适合通过点击快速执行任务,但其功能局限于用户触发的操作,难以处理复杂工作流(如基于特定时间的自动化或与操作系统功能的交互)。

此外,个人偏好也是一个因素。对于喜欢更精细控制的用户,将自动化脚本保存在文件系统中感觉更整洁,且不受特定浏览器生态的限制。但我们承认书签脚本有其优势,可能是许多用户的首选。

为每个任务编写 Playwright 脚本太耗时。

您可以使用 Chromium 开发者工具的 Recorder 标签页 录制操作并导出为 Puppeteer 脚本(其 API 与 Playwright 相同)。或者使用 Playwright 的 codegen

此外,鉴于 Playwright 的流行,您可以用自然语言描述任务并向 AI 请求生成 Playwright 脚本。稍加练习后,这将帮助您快速完成脚本编写。

项目地址

https://github.com/sebastiancarlos/beachpatrol/blob/main/README.md




扫码加入技术交流群,备注「开发语言-城市-昵称

(文:GitHubStore)

发表评论

×

下载每时AI手机APP

 

和大家一起交流AI最新资讯!

立即前往