autoUpload/utils/README_human_typing.md

6.2 KiB

人类化输入包装器 (HumanTypingWrapper)

概述

HumanTypingWrapper 是一个基于 Playwright 的人类化输入包装器,旨在模拟真实人类的打字行为。它提供了随机时间间隔输入、可变输入速度、偶尔的错误修正以及其他人类特征的模拟。

主要特性

🎯 核心功能

  • 随机输入速度:模拟人类不同的打字速度
  • 思考停顿:随机的停顿,模拟思考过程
  • 错误修正:偶尔输入错误字符并及时修正
  • 疲劳效应:长时间输入后速度逐渐减慢
  • 分段输入:长文本自动分段输入,更自然

🛡️ 反检测特性

  • 键盘邻键错误:基于真实键盘布局的错误模拟
  • 退格重输:偶尔删除并重新输入字符
  • 自然停顿:在标点符号后适当停顿
  • 点击延迟:点击前后的随机延迟

🔧 高度可配置

  • 所有参数都可以自定义
  • 支持不同场景的预设配置
  • 运行时动态调整配置

快速开始

基础使用

from playwright.async_api import async_playwright
from utils.human_typing_wrapper import create_human_typer

async def basic_example():
    async with async_playwright() as p:
        browser = await p.chromium.launch(headless=False)
        page = await browser.new_page()
        
        # 创建人类化输入器
        typer = create_human_typer(page)
        
        # 访问目标页面
        await page.goto("https://example.com")
        
        # 人类化输入文本
        await typer.type_text_human("#username", "我的用户名")
        await typer.type_text_human("#password", "我的密码")
        
        # 人类化点击
        await typer.human_click("#login-button")
        
        await browser.close()

自定义配置

from utils.human_typing_wrapper import HumanTypingWrapper

# 自定义配置
custom_config = {
    'min_typing_speed': 2,      # 最小输入速度 (字符/秒)
    'max_typing_speed': 6,      # 最大输入速度 (字符/秒)
    'pause_probability': 0.20,  # 停顿概率 (20%)
    'correction_probability': 0.15,  # 错误修正概率 (15%)
    'fatigue_effect': True,     # 启用疲劳效应
}

# 使用自定义配置
typer = HumanTypingWrapper(page, custom_config)

配置选项

输入速度设置

{
    'min_typing_speed': 2,      # 最小打字速度 (字符/秒)
    'max_typing_speed': 10,     # 最大打字速度 (字符/秒)
}

思考停顿设置

{
    'pause_probability': 0.15,     # 停顿概率 (15%)
    'min_pause_duration': 0.3,     # 最小停顿时长 (秒)
    'max_pause_duration': 2.5,     # 最大停顿时长 (秒)
}

错误修正设置

{
    'correction_probability': 0.10,    # 错误修正概率 (10%)
    'backspace_probability': 0.05,     # 退格重输概率 (5%)
}

点击延迟设置

{
    'click_delay_before': (0.1, 0.4),  # 点击前延迟范围
    'click_delay_after': (0.2, 0.6),   # 点击后延迟范围
}

分段输入设置

{
    'chunk_input': True,           # 启用分段输入
    'max_chunk_length': 50,        # 每段最大长度
    'chunk_pause_duration': (0.5, 1.5),  # 段落间停顿时长
}

疲劳效应设置

{
    'fatigue_effect': True,        # 启用疲劳效应
    'fatigue_threshold': 100,      # 疲劳阈值 (字符数)
    'fatigue_slowdown': 0.3,       # 疲劳减慢比例 (30%)
}

API 参考

主要方法

type_text_human(selector, text, clear_first=True)

在指定元素中人类化输入文本

  • selector: CSS选择器
  • text: 要输入的文本
  • clear_first: 是否先清空现有内容

human_click(selector, wait_after=True)

人类化点击元素

  • selector: CSS选择器
  • wait_after: 点击后是否等待

human_scroll(direction="down", amount=3)

人类化滚动页面

  • direction: 滚动方向 ("up" 或 "down")
  • amount: 滚动次数

click_and_type(selector, text, **kwargs)

点击元素并输入文本的便捷方法

update_config(new_config)

更新配置参数

使用场景

1. 微信公众号自动发布

# 微信公众号专用配置
wechat_config = {
    'min_typing_speed': 3,
    'max_typing_speed': 7,
    'pause_probability': 0.20,
    'correction_probability': 0.08,
    'chunk_input': True,
    'max_chunk_length': 30,
}

typer = create_human_typer(page, wechat_config)
await typer.type_text_human("#title", "文章标题")
await typer.type_text_human(".ProseMirror", "文章内容...")

2. 表单填写

# 表单填写配置
form_config = {
    'min_typing_speed': 4,
    'max_typing_speed': 8,
    'pause_probability': 0.10,
    'correction_probability': 0.05,
}

typer = create_human_typer(page, form_config)
await typer.type_text_human("#name", "张三")
await typer.type_text_human("#email", "zhangsan@example.com")
await typer.type_text_human("#phone", "13800138000")

3. 搜索查询

# 搜索查询配置
search_config = {
    'min_typing_speed': 5,
    'max_typing_speed': 12,
    'pause_probability': 0.05,
    'correction_probability': 0.12,
}

typer = create_human_typer(page, search_config)
await typer.type_text_human("#search-box", "人工智能发展趋势")
await typer.human_click("#search-button")

最佳实践

1. 配置选择

  • 谨慎场景(银行、支付):低错误率,慢速输入
  • 一般场景(社交媒体):中等错误率,正常速度
  • 测试场景:高错误率,观察效果

2. 性能优化

  • 对于长文本,启用分段输入
  • 根据网站响应速度调整延迟
  • 在无头模式下适当提高速度

3. 反检测策略

  • 避免过于规律的操作模式
  • 在关键操作前增加适当停顿
  • 模拟真实的浏览行为

注意事项

  1. 兼容性:支持同步和异步 Playwright 页面
  2. 性能影响:人类化操作会显著增加执行时间
  3. 检测规避:合理配置参数以避免被反爬虫系统识别
  4. 错误处理:所有方法都包含异常处理,返回成功/失败状态

示例文件

  • examples/human_typing_example.py - 基础使用示例
  • examples/wechat_human_typing_integration.py - 微信公众号集成示例

许可证

此项目遵循与主项目相同的许可证。