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(line
export 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(line
beachmsg search "您的搜索关键词"
提示:您可以编辑命令文件并重新运行,无需重启 beachpatrol
服务器!更改会自动生效。
您还可以参考内置的 commands/smoke-test.js
命令获取灵感。
技术细节
首先,beachpatrol
包含一个定制的 Playwright 脚本来启动浏览器。它传递的参数尽可能还原非自动化浏览器的体验。例如,它不会设置固定视口(这是 Playwright 自动化测试的默认行为)。
Beachpatrol 还安装并加载了 patchright
、playwright-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 更具优势。
|
|
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
为什么选择 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)