背景

最近在探索浏览器自动化工具的过程中,我们尝试为 ARM64 Linux 环境构建一个类似 agent-browser 的工具(基于 Playwright)。由于项目使用 Selenium + undetected-chromedriver + axe-core,我们将其命名为 browsery。

项目架构

1
2
3
4
5
6
7
8
browsery/
├── cli/
│ ├── Cargo.toml
│ └── src/main.rs
├── src/
│ ├── cli.py
│ └── daemon.py
└── ...

核心组件:

  • Rust CLI - 快速命令行界面
  • Python 后端 - Selenium + undetected-chromedriver
  • Daemon 模式 - 通过 Unix socket 保持浏览器实例

遇到的挑战

1. 进程隔离问题

CLI 命令每次运行都是独立的进程,无法保持浏览器实例:

1
2
$ python -m src.cli open "url"
$ python -m src.cli click "#next"

解决方案:添加 Daemon 模式,类似 agent-browser,通过 Unix socket 通信。

2. ARM64 Linux 支持问题

在研究 undetected-chromedriver 时,我们发现:

  • Chrome for Testing 不提供 Linux ARM64 chromedriver
  • 只有 mac-arm64 可用,没有 linux64-arm64
  • 官方也没有计划支持

我们 fork 了 undetected-chromedriver 并添加了 ARM64 检测和警告:

1
2
3
arch = platform_module.machine()
if arch in ("aarch64", "arm64"):
logger.warning("ARM64 (aarch64) Linux detected...")

3. 磁盘空间限制

尝试从源码构建 chromedriver 需要:

  • Chromium 源码:30-50GB+
  • 当前环境可用空间:4GB

无法在当前环境完成构建。

解决方案

  • 使用 agent-browser - 基于 Playwright,已支持 ARM64
  • 使用 Selenium Grid - 但需要额外的服务器资源
  • 等待官方支持 - Chrome for Testing 未来可能添加 ARM64 支持

总结

browsery 项目虽然因为 ARM64 生态限制暂时无法完全替代 agent-browser,但项目架构和 Rust CLI + Python Daemon 的模式为未来的扩展奠定了基础。

参考

留言