autoUpload/utils/README_anti_detection.md

325 lines
7.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 反检测工具使用指南
## 概述
`utils/anti_detection.py` 提供了统一的反自动化检测工具,供所有社交媒体上传器使用。
## 🎯 主要功能
### 1. 统一的反检测措施
- 标准化的浏览器启动参数
- 真实的用户代理字符串
- 合适的视口和环境设置
- 自动stealth脚本注入
### 2. 简化的API接口
- 一行代码创建反检测浏览器
- 统一的上下文配置
- 自动页面设置
### 3. 灵活的配置选项
- 支持有头/无头模式
- 可自定义浏览器参数
- 可自定义上下文选项
## 📚 API 参考
### 核心函数
#### `create_stealth_browser()`
```python
async def create_stealth_browser(
playwright: Playwright,
headless: bool = True,
executable_path: Optional[str] = None,
custom_args: Optional[List[str]] = None
) -> Browser
```
创建具有反检测功能的浏览器实例。
**参数:**
- `playwright`: Playwright实例
- `headless`: 是否使用无头模式默认True
- `executable_path`: 自定义浏览器路径(可选)
- `custom_args`: 额外的浏览器参数(可选)
#### `create_stealth_context()`
```python
async def create_stealth_context(
browser: Browser,
account_file: str,
headless: bool = True,
custom_options: Optional[Dict[str, Any]] = None
) -> BrowserContext
```
创建具有反检测功能的浏览器上下文。
**参数:**
- `browser`: Browser实例
- `account_file`: Cookie文件路径
- `headless`: 是否为无头模式
- `custom_options`: 自定义上下文选项(可选)
#### `setup_stealth_page()`
```python
async def setup_stealth_page(
context: BrowserContext,
url: str
) -> Page
```
创建并设置具有反检测功能的页面。
**参数:**
- `context`: BrowserContext实例
- `url`: 要访问的URL
### 便捷函数
#### `quick_setup_stealth_browser()`
```python
async def quick_setup_stealth_browser(
playwright: Playwright,
account_file: str,
target_url: str,
headless: bool = True,
executable_path: Optional[str] = None
) -> Tuple[Browser, BrowserContext, Page]
```
一键创建完整的反检测浏览器环境。
### 工具类
#### `SocialMediaUploader`
```python
class SocialMediaUploader:
def __init__(self, headless: bool = True, executable_path: Optional[str] = None)
async def create_browser_session(
self,
playwright: Playwright,
account_file: str,
target_url: str,
custom_browser_args: Optional[List[str]] = None,
custom_context_options: Optional[Dict[str, Any]] = None
) -> Tuple[Browser, BrowserContext, Page]
async def close_session(self)
```
基础上传器类,提供完整的会话管理。
## 🔧 使用示例
### 1. 基础使用(推荐)
```python
from utils.anti_detection import create_stealth_browser, create_stealth_context, setup_stealth_page
async def upload(self, playwright: Playwright) -> None:
# 创建反检测浏览器
browser = await create_stealth_browser(
playwright=playwright,
headless=self.headless,
executable_path=self.local_executable_path
)
# 创建反检测上下文
context = await create_stealth_context(
browser=browser,
account_file=self.account_file,
headless=self.headless
)
# 创建反检测页面
page = await setup_stealth_page(context, "https://example.com")
# 执行上传逻辑...
# 清理
await context.close()
await browser.close()
```
### 2. 快速设置
```python
from utils.anti_detection import quick_setup_stealth_browser
async def upload(self, playwright: Playwright) -> None:
browser, context, page = await quick_setup_stealth_browser(
playwright=playwright,
account_file=self.account_file,
target_url="https://example.com",
headless=self.headless,
executable_path=self.local_executable_path
)
# 执行上传逻辑...
# 清理
await context.close()
await browser.close()
```
### 3. 使用基础类
```python
from utils.anti_detection import SocialMediaUploader
class MyUploader(SocialMediaUploader):
async def upload(self, playwright: Playwright) -> None:
browser, context, page = await self.create_browser_session(
playwright=playwright,
account_file=self.account_file,
target_url="https://example.com"
)
# 执行上传逻辑...
await self.close_session()
```
## 🛡️ 反检测技术
### 浏览器参数
```python
STANDARD_BROWSER_ARGS = [
'--no-sandbox',
'--disable-blink-features=AutomationControlled', # 核心
'--disable-web-security',
'--disable-features=VizDisplayCompositor',
'--disable-dev-shm-usage',
'--disable-infobars',
'--disable-extensions',
'--disable-gpu',
'--no-first-run',
'--no-default-browser-check',
'--lang=zh-CN'
]
```
### 环境伪装
```python
DEFAULT_CONTEXT_OPTIONS = {
'viewport': {'width': 1920, 'height': 1080},
'locale': 'zh-CN',
'timezone_id': 'Asia/Shanghai',
'device_scale_factor': 1,
'has_touch': False,
'is_mobile': False
}
```
### 用户代理轮换
- 自动从真实浏览器用户代理池中选择
- 支持Chrome、Firefox等主流浏览器
- 定期更新保持时效性
## 🧪 测试
运行测试脚本验证功能:
```bash
python examples/test_anti_detection.py
```
测试内容包括:
- 基础功能测试
- 快速设置测试
- 配置信息验证
- 不同模式测试
## 🔄 迁移指南
### 从旧版本迁移
**旧代码:**
```python
browser_args = [
'--no-sandbox',
'--disable-blink-features=AutomationControlled',
# ... 更多参数
]
browser = await playwright.chromium.launch(
headless=self.headless,
executable_path=self.local_executable_path,
args=browser_args
)
context_options = {
'storage_state': f"{self.account_file}",
'viewport': {'width': 1920, 'height': 1080},
# ... 更多选项
}
context = await browser.new_context(**context_options)
context = await set_init_script(context)
page = await context.new_page()
await page.goto("https://example.com")
```
**新代码:**
```python
from utils.anti_detection import create_stealth_browser, create_stealth_context, setup_stealth_page
browser = await create_stealth_browser(
playwright=playwright,
headless=self.headless,
executable_path=self.local_executable_path
)
context = await create_stealth_context(
browser=browser,
account_file=self.account_file,
headless=self.headless
)
page = await setup_stealth_page(context, "https://example.com")
```
## 💡 最佳实践
1. **优先使用有头模式**
```python
headless=False # 推荐,避免检测
```
2. **合理处理异常**
```python
try:
browser, context, page = await quick_setup_stealth_browser(...)
# 上传逻辑
finally:
await context.close()
await browser.close()
```
3. **记录调试信息**
```python
from utils.anti_detection import get_anti_detection_info
logger.info(f"反检测配置: {get_anti_detection_info()}")
```
4. **定期测试验证**
- 使用测试脚本验证功能
- 监控上传成功率
- 及时调整策略
## 🔮 未来计划
- [ ] 支持更多浏览器类型
- [ ] 动态指纹管理
- [ ] 智能检测规避
- [ ] 性能优化
- [ ] 更多测试用例
---
**注意**:反检测技术需要根据目标平台的变化进行调整,建议定期更新和测试。