每日备份 2026-06-10 12:57:13
This commit is contained in:
1 parent
fda2ccb8c2
commit
3d2e638c6a
244 files changed
+58890
-3
No files matched your search
@@ -0,0 +1,194 @@
|
||||
---
|
||||
name: desktop-browser
|
||||
description: 通过真实桌面操作浏览器自动化,包含反检测模式。使用场景:(1) 需要登录或 cookie 认证的网站操作 (2) 需要保持会话状态的浏览器操作 (3) OpenClaw 浏览器失败时的备选方案 (4) 需要操作桌面应用的场景 (5) 反检测浏览器操作
|
||||
---
|
||||
|
||||
# Desktop Browser Skill
|
||||
|
||||
通过 X11 连接真实桌面,操作 Chrome/Chromium 浏览器进行自动化。
|
||||
|
||||
## 快速开始
|
||||
|
||||
### 环境要求
|
||||
|
||||
```bash
|
||||
# 安装依赖
|
||||
pip install pyautogui pillow gnome-screenshot
|
||||
|
||||
# 复制 Xauthority (首次需要)
|
||||
cp /home/yh6788/.Xauthority /root/
|
||||
```
|
||||
|
||||
### 基础操作
|
||||
|
||||
```python
|
||||
import pyautogui
|
||||
import os
|
||||
|
||||
# 设置环境变量
|
||||
os.environ['DISPLAY'] = ':0'
|
||||
os.environ['XAUTHORITY'] = '/home/yh6788/.Xauthority'
|
||||
|
||||
# 截图
|
||||
img = pyautogui.screenshot('/path/to/screenshot.png')
|
||||
|
||||
# 点击坐标 (需先获取坐标)
|
||||
pyautogui.click(x, y)
|
||||
|
||||
# 输入文字
|
||||
pyautogui.typewrite("text", interval=0.1)
|
||||
|
||||
# 快捷键
|
||||
pyautogui.hotkey('ctrl', 't') # 新标签页
|
||||
pyautogui.hotkey('ctrl', 'w') # 关闭标签页
|
||||
```
|
||||
|
||||
## 反检测浏览器 (Camoufox)
|
||||
|
||||
### 什么是 Camoufox
|
||||
|
||||
Camoufox 是基于 Firefox 的反检测浏览器,在 C++ 级别进行指纹伪装,能绕过:
|
||||
- Cloudflare Turnstile
|
||||
- Datadome
|
||||
- Airbnb
|
||||
- Yelp
|
||||
- 其他反爬虫机制
|
||||
|
||||
### 使用 Camoufox
|
||||
|
||||
**方式1: 通过命令行调用 Camoufox**
|
||||
|
||||
```bash
|
||||
# 进入 pybox 容器
|
||||
distrobox-enter pybox
|
||||
|
||||
# 使用 Camoufox 打开网站
|
||||
python3.14 -m camoufox open https://example.com
|
||||
```
|
||||
|
||||
**方式2: 桌面浏览器改用 Camoufox**
|
||||
|
||||
1. 安装 Camoufox: `distrobox-enter pybox -- python3.14 -m pip install camoufox`
|
||||
2. 桌面浏览器使用 Camoufox 替代 Chrome
|
||||
|
||||
### Camoufox vs 普通浏览器
|
||||
|
||||
| 特性 | Desktop Browser (普通) | Camoufox (反检测) |
|
||||
|------|----------------------|-----------------|
|
||||
| 反指纹 | ❌ | ✅ C++级别 |
|
||||
| Cloudflare | ❌ | ✅ 自动绕过 |
|
||||
| 代理支持 | 系统代理 | 可配置 Residential |
|
||||
| 速度 | 快 | 稍慢 |
|
||||
|
||||
### 何时用反检测
|
||||
|
||||
- OpenClaw 浏览器被检测
|
||||
- 遇到 Cloudflare 挑战
|
||||
- 目标网站反爬严格
|
||||
- 普通浏览器无法访问
|
||||
|
||||
### 启动反检测环境
|
||||
|
||||
```bash
|
||||
# 启动 pybox 容器
|
||||
distrobox start pybox
|
||||
|
||||
# 进入容器
|
||||
distrobox-enter pybox
|
||||
|
||||
# 安装 Camoufox (首次)
|
||||
python3.14 -m pip install camoufox
|
||||
```
|
||||
|
||||
### 注意事项
|
||||
|
||||
- Camoufox 需要在 pybox 中运行
|
||||
- 首次运行会自动下载 (~700MB)
|
||||
- 建议使用 residential 代理 (数据中心IP容易被封)
|
||||
|
||||
## 获取坐标
|
||||
|
||||
### 方法1: 手动获取
|
||||
|
||||
1. 截取屏幕
|
||||
2. 用图片查看器查看坐标
|
||||
3. 记录需要点击的位置
|
||||
|
||||
### 方法2: 打印鼠标位置
|
||||
|
||||
```python
|
||||
import pyautogui
|
||||
while True:
|
||||
print(pyautogui.position())
|
||||
time.sleep(1)
|
||||
```
|
||||
|
||||
## 常用脚本
|
||||
|
||||
### 打开浏览器并操作
|
||||
|
||||
```python
|
||||
import pyautogui
|
||||
import time
|
||||
|
||||
os.environ['DISPLAY'] = ':0'
|
||||
os.environ['XAUTHORITY'] = '/home/yh6788/.Xauthority'
|
||||
|
||||
# 点击任务栏 Chrome 图标 (位置需根据实际情况调整)
|
||||
pyautogui.click(100, 1050) # 假设 Chrome 在左下角
|
||||
time.sleep(2)
|
||||
|
||||
# 新标签页
|
||||
pyautogui.hotkey('ctrl', 't')
|
||||
time.sleep(0.5)
|
||||
|
||||
# 输入网址
|
||||
pyautogui.typewrite("https://www.example.com", interval=0.05)
|
||||
pyautogui.press('enter')
|
||||
time.sleep(3)
|
||||
|
||||
# 截图
|
||||
pyautogui.screenshot('result.png')
|
||||
```
|
||||
|
||||
### 自动登录
|
||||
|
||||
```python
|
||||
# 1. 截取登录界面
|
||||
# 2. 点击用户名输入框
|
||||
pyautogui.click(username_x, username_y)
|
||||
pyautogui.typewrite("username", interval=0.1)
|
||||
|
||||
# 3. 点击密码输入框
|
||||
pyautogui.click(password_x, password_y)
|
||||
pyautogui.typewrite("password", interval=0.1)
|
||||
|
||||
# 4. 点击登录按钮或按回车
|
||||
pyautogui.press('enter')
|
||||
```
|
||||
|
||||
## 注意事项
|
||||
|
||||
- 坐标需要根据屏幕分辨率调整 (当前: 1366x768)
|
||||
- 操作间隙添加 time.sleep() 等待页面加载
|
||||
- 敏感操作前先截图确认
|
||||
- XAUTHORITY 必须正确,否则无法连接桌面
|
||||
|
||||
## 故障排除
|
||||
|
||||
### Xlib 认证错误
|
||||
|
||||
```
|
||||
Xlib.error.DisplayConnectionError: Can't connect to display ":0"
|
||||
```
|
||||
|
||||
解决:
|
||||
```bash
|
||||
cp /home/yh6788/.Xauthority /root/
|
||||
export XAUTHORITY=/home/yh6788/.Xauthority
|
||||
```
|
||||
|
||||
### 坐标不准
|
||||
|
||||
- 截图后用图像查看器确认坐标
|
||||
- 不同分辨率坐标不同
|
||||
@@ -0,0 +1,47 @@
|
||||
#!/bin/bash
|
||||
# Desktop Browser 快捷命令
|
||||
# 用法: desktop-browser.sh screenshot|click|type|press|hotkey|open|pos [参数]
|
||||
|
||||
export DISPLAY=:0
|
||||
export XAUTHORITY=/home/yh6788/.Xauthority
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
||||
|
||||
case "$1" in
|
||||
screenshot)
|
||||
python3 "$SCRIPT_DIR/desktop_browser.py" screenshot "${2:-/root/.openclaw/workspace/desktop.png}"
|
||||
;;
|
||||
click)
|
||||
python3 "$SCRIPT_DIR/desktop_browser.py" click "$2" "$3"
|
||||
;;
|
||||
type)
|
||||
shift
|
||||
python3 "$SCRIPT_DIR/desktop_browser.py" type "$@"
|
||||
;;
|
||||
press)
|
||||
python3 "$SCRIPT_DIR/desktop_browser.py" press "$2"
|
||||
;;
|
||||
hotkey)
|
||||
shift
|
||||
python3 "$SCRIPT_DIR/desktop_browser.py" hotkey "$@"
|
||||
;;
|
||||
open)
|
||||
python3 "$SCRIPT_DIR/desktop_browser.py" open "$2"
|
||||
;;
|
||||
pos)
|
||||
python3 "$SCRIPT_DIR/desktop_browser.py" pos
|
||||
;;
|
||||
*)
|
||||
echo "用法: $0 {screenshot|click|type|press|hotkey|open|pos} [参数]"
|
||||
echo ""
|
||||
echo "示例:"
|
||||
echo " $0 screenshot # 截图到默认位置"
|
||||
echo " $0 screenshot /path/to/img.png # 截图到指定位置"
|
||||
echo " $0 click 100 200 # 点击坐标 (100,200)"
|
||||
echo " $0 type Hello World # 输入文字"
|
||||
echo " $0 press enter # 按键"
|
||||
echo " $0 hotkey ctrl t # 快捷键"
|
||||
echo " $0 open https://baidu.com # 打开网址"
|
||||
echo " $0 pos # 打印鼠标位置"
|
||||
;;
|
||||
esac
|
||||
Reference in new issue
Block a user