208 lines
5.6 KiB
Markdown
208 lines
5.6 KiB
Markdown
|
|
# AdsPower 指纹浏览器配置指南
|
|||
|
|
|
|||
|
|
## 问题:为什么点击"获取验证码"打开的是默认Chrome?
|
|||
|
|
|
|||
|
|
当前代码默认使用**普通Playwright浏览器**,不是**AdsPower指纹浏览器**。
|
|||
|
|
|
|||
|
|
要启用AdsPower模式,需要:
|
|||
|
|
1. **启动AdsPower应用**
|
|||
|
|
2. **配置AdsPower参数**(见下文)
|
|||
|
|
3. **代码中启用AdsPower模式**
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## AdsPower 配置方法
|
|||
|
|
|
|||
|
|
### 方法1:修改YAML配置文件(**推荐**)
|
|||
|
|
|
|||
|
|
在 `config.dev.yaml` 或 `config.prod.yaml` 中配置:
|
|||
|
|
|
|||
|
|
```yaml
|
|||
|
|
# ========== AdsPower指纹浏览器配置 ==========
|
|||
|
|
adspower:
|
|||
|
|
enabled: true # 是否启用AdsPower
|
|||
|
|
api_base: "http://local.adspower.net:50325" # AdsPower API地址
|
|||
|
|
api_key: "e5afd5a4cead5589247febbeabc39bcb" # API Key(可选)
|
|||
|
|
user_id: "user_h235l72" # 用户ID(可选)
|
|||
|
|
default_group_id: "0" # 默认分组ID
|
|||
|
|
# 指纹配置
|
|||
|
|
fingerprint:
|
|||
|
|
automatic_timezone: true # 自动设置时区
|
|||
|
|
language: ["zh-CN", "zh"] # 浏览器语言
|
|||
|
|
user_agent: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 方法2:使用环境变量
|
|||
|
|
|
|||
|
|
在系统环境变量或 `.env` 文件中设置:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# AdsPower配置
|
|||
|
|
ADSPOWER_ENABLED=true
|
|||
|
|
ADSPOWER_API_BASE=http://local.adspower.net:50325
|
|||
|
|
ADSPOWER_API_KEY=e5afd5a4cead5589247febbeabc39bcb
|
|||
|
|
ADSPOWER_USER_ID=user_h235l72
|
|||
|
|
ADSPOWER_DEFAULT_GROUP_ID=0
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**注意**:环境变量优先级高于YAML配置。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 获取AdsPower配置参数
|
|||
|
|
|
|||
|
|
### 1. API地址 (api_base)
|
|||
|
|
- 默认本地地址:`http://local.adspower.net:50325`
|
|||
|
|
- 或使用:`http://127.0.0.1:50325`
|
|||
|
|
|
|||
|
|
### 2. API Key (api_key)
|
|||
|
|
1. 打开AdsPower应用
|
|||
|
|
2. 点击右上角**设置** → **安全** → **本地API**
|
|||
|
|
3. 开启"允许本地API访问"
|
|||
|
|
4. 复制API Key
|
|||
|
|
|
|||
|
|
### 3. User ID (user_id)
|
|||
|
|
1. 打开AdsPower应用
|
|||
|
|
2. 点击右上角头像
|
|||
|
|
3. 查看"用户ID"(如:`user_h235l72`)
|
|||
|
|
|
|||
|
|
### 4. Profile ID (adspower_profile_id)
|
|||
|
|
- 在AdsPower中创建浏览器配置
|
|||
|
|
- 右键配置 → 复制配置ID(如:`jvqjvvp`)
|
|||
|
|
- 如果不指定,系统会自动创建新配置
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 代码中启用AdsPower模式
|
|||
|
|
|
|||
|
|
### 方法1:直接在创建XHSLoginService时指定
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
from xhs_login import XHSLoginService
|
|||
|
|
|
|||
|
|
# 启用AdsPower模式
|
|||
|
|
service = XHSLoginService(
|
|||
|
|
use_adspower=True, # 关键参数
|
|||
|
|
adspower_profile_id="jvqjvvp" # 可选:指定配置ID
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
# 发送验证码
|
|||
|
|
await service.send_verification_code(
|
|||
|
|
phone="13800138000",
|
|||
|
|
proxy={'server': 'http://proxy_ip:port', 'username': 'user', 'password': 'pass'} # 可选
|
|||
|
|
)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 方法2:修改main.py中的登录接口
|
|||
|
|
|
|||
|
|
在 `main.py` 中找到登录相关接口,修改为:
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
from config import get_config
|
|||
|
|
|
|||
|
|
@app.post("/api/xhs/send-code")
|
|||
|
|
async def send_verification_code(request: SendCodeRequest):
|
|||
|
|
try:
|
|||
|
|
# 从配置读取是否启用AdsPower
|
|||
|
|
config = get_config()
|
|||
|
|
use_adspower = config.get_bool('adspower.enabled', False)
|
|||
|
|
|
|||
|
|
service = XHSLoginService(
|
|||
|
|
use_adspower=use_adspower, # 使用配置项
|
|||
|
|
headless=False
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
result = await service.send_verification_code(phone=request.phone)
|
|||
|
|
return result
|
|||
|
|
except Exception as e:
|
|||
|
|
return {"success": False, "message": str(e)}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
这样就可以通过YAML配置文件中的 `adspower.enabled` 来控制是否使用AdsPower。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 验证步骤
|
|||
|
|
|
|||
|
|
### 1. 确认AdsPower正在运行
|
|||
|
|
```python
|
|||
|
|
from fingerprint_browser import FingerprintBrowserManager
|
|||
|
|
|
|||
|
|
manager = FingerprintBrowserManager()
|
|||
|
|
is_running = await manager.check_adspower_status()
|
|||
|
|
print(f"AdsPower运行状态: {is_running}")
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 2. 查看已有配置列表
|
|||
|
|
```python
|
|||
|
|
profiles = await manager.get_browser_profiles()
|
|||
|
|
for profile in profiles:
|
|||
|
|
print(f"配置ID: {profile['user_id']}, 名称: {profile['name']}")
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 3. 测试发送验证码
|
|||
|
|
- 启动服务后调用发送验证码接口
|
|||
|
|
- 观察打开的浏览器窗口标题:
|
|||
|
|
- AdsPower模式:窗口标题会显示"AdsPower"
|
|||
|
|
- 普通模式:普通Chrome窗口
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## AdsPower vs 普通Chrome的区别
|
|||
|
|
|
|||
|
|
| 特性 | AdsPower | 普通Chrome |
|
|||
|
|
|------|----------|------------|
|
|||
|
|
| 指纹隔离 | ✅ 每个配置独立指纹 | ❌ 使用本机真实指纹 |
|
|||
|
|
| 环境隔离 | ✅ Cookie、缓存隔离 | ❌ 共享环境 |
|
|||
|
|
| 反检测 | ✅ 模拟真实设备 | ❌ 易被识别为自动化 |
|
|||
|
|
| 多账号管理 | ✅ 支持多配置 | ❌ 不便于管理 |
|
|||
|
|
| 代理管理 | ✅ 配置级代理 | ⚠️ 需要手动设置 |
|
|||
|
|
|
|||
|
|
**建议**:生产环境强烈建议使用AdsPower模式,以避免账号风控。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 常见问题
|
|||
|
|
|
|||
|
|
### Q1: "AdsPower 未运行,请先启动 AdsPower"
|
|||
|
|
**解决方法**:
|
|||
|
|
1. 确认AdsPower应用已启动
|
|||
|
|
2. 检查API地址是否正确(默认50325端口)
|
|||
|
|
3. 确认防火墙没有阻止本地API
|
|||
|
|
|
|||
|
|
### Q2: API调用返回401/403错误
|
|||
|
|
**解决方法**:
|
|||
|
|
1. 检查API Key是否正确
|
|||
|
|
2. 确认在AdsPower设置中开启了"允许本地API访问"
|
|||
|
|
3. 某些版本AdsPower不需要API Key,可以留空
|
|||
|
|
|
|||
|
|
### Q3: 浏览器启动失败
|
|||
|
|
**解决方法**:
|
|||
|
|
1. 检查AdsPower版本是否最新
|
|||
|
|
2. 确认配置ID存在且可用
|
|||
|
|
3. 查看AdsPower日志排查错误
|
|||
|
|
|
|||
|
|
### Q4: 想要为不同用户使用不同的AdsPower配置
|
|||
|
|
**解决方法**:
|
|||
|
|
```python
|
|||
|
|
# 根据用户选择不同的profile_id
|
|||
|
|
user_profile_mapping = {
|
|||
|
|
"13800138000": "jvqjvvp",
|
|||
|
|
"13900139000": "kprklms"
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
profile_id = user_profile_mapping.get(phone)
|
|||
|
|
service = XHSLoginService(
|
|||
|
|
use_adspower=True,
|
|||
|
|
adspower_profile_id=profile_id
|
|||
|
|
)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 参考资料
|
|||
|
|
|
|||
|
|
- [AdsPower官方文档](https://www.adspower.net/)
|
|||
|
|
- [AdsPower API文档](https://localapi-doc-en.adspower.com/)
|
|||
|
|
- [ai_mip项目参考](../ai_mip/fingerprint_browser.py)
|