拟人操作

普通 click(尤其 mode='uia')往往是「瞬间命中控件」,鼠标指针可能几乎不动。
拟人操作会:先沿曲线把鼠标移过去 → 再按下/抬起,看起来更像真人。

适合:对「机器人式瞬点」较敏感的客户端。不需要时继续用 uia 即可。


方法一览

方法 / 常量说明
MODE_HUMAN / mode='human'构造或 set_mode 后,普通 click / click_xy 走拟人路径
human_move(x, y, duration=None)只移动到屏幕坐标,不点击
human_click(...)按控件或坐标拟人左键(可双击)
human_click_xy(x, y, ...)屏幕坐标拟人点击
human_right_click_xy(x, y, ...)屏幕坐标拟人右键
对比mode='mouse'mode='human' / human_click
是否真移动鼠标
是否曲线移动通常直线/直接落点贝塞尔曲线
可否调移动耗时 / 按住时长较少duration / hold
落点抖动可用 rangerange_x / range_y

零基础:三种用法,选一种即可

用法 A:整段脚本都用拟人(最省事)

from winautox import WinAuto, MODE_HUMAN
import time

hwnd = WinAuto.find_hwnd('YourMainWndClass', '目标应用')
auto = WinAuto(hwnd, mode=MODE_HUMAN)  # 或 mode='human'
auto.activate()
time.sleep(0.3)

# 之后所有 click / click_xy 都走拟人
auto.click(name='发送')
auto.click_xy(500, 400)

用法 B:平时用 uia,敏感按钮单独拟人(推荐)

auto = WinAuto(hwnd, mode='uia')
auto.activate()
time.sleep(0.3)

# 普通按钮:uia 更快更稳
auto.click(name='设置')

# 敏感按钮:显式拟人
btn = auto.find(name='确认')
if btn is None:
    raise RuntimeError('找不到「确认」,请先 dump 控件树核对 Name')
auto.human_click(btn, duration=0.4, hold=0.08, range_x=2, range_y=2)

用法 C:只知道屏幕坐标

# 可用截图工具或软件取色/取点得到 x,y
auto.human_move(100, 200, duration=0.35)          # 只移动
auto.human_click_xy(400, 300, duration=0.3, hold=0.05, range_x=3, range_y=3)
auto.human_right_click_xy(400, 300)

参数怎么调(第一次可以照抄)

参数建议初值含义
duration0.30.5鼠标移动耗时(秒),越大越「慢」
hold0.050.1按下保持多久再松开
range_x / range_y25落点在目标附近随机抖几像素
double=True需要双击时拟人双击
auto.human_click(
    name='确认',
    duration=0.4,
    hold=0.08,
    range_x=2,
    range_y=2,
)

API 速查

human_move

auto.human_move(x, y, duration=None)  # 返回 self,可链式

human_click

auto.human_click(
    ctrl=None,
    ctrl_type='', name='', aid='', cls='', depth=10,
    x=0, y=0,
    button='left', double=False,
    position='center',
    margin_left=0, margin_top=0, margin_right=0, margin_bottom=0,
    duration=None, hold=None, move=True,
    range_x=0, range_y=0,
)

控件定位方式与普通 click 相同:传 ctrl,或传 name/aid/cls

human_click_xy / human_right_click_xy

auto.human_click_xy(400, 300, duration=0.3, hold=0.05, range_x=2, range_y=2)
auto.human_right_click_xy(400, 300)

完整示例(记事本菜单,可改成你的按钮)

# -*- coding: utf-8 -*-
from winautox import WinAuto
import time

hwnd = (
    WinAuto.find_hwnd('Notepad', '记事本')
    or WinAuto.find_hwnd('Notepad', '无标题')
    or WinAuto.find_hwnd('Notepad', 'Untitled')
)
if not hwnd:
    raise RuntimeError('请先打开记事本')

auto = WinAuto(hwnd, mode='uia')
auto.activate()
time.sleep(0.3)

# 先 dump 确认菜单 Name,再改下面的 name=
# WinAuto.print_windows_dump(auto.dump_windows_controls(max_lines=200))

auto.human_click(name='文件', duration=0.35, range_x=2, range_y=2)
print('已拟人点击「文件」菜单')

常见问题

现象原因处理
鼠标不动 / 点偏窗口最小化或坐标过期activate();重新取点
找到控件但拟人失败坐标无效find 打印 BoundingRectangle
仍然像机器人duration 太短、无抖动加大 duration,加 range_x/y
想后台静默点击拟人必须前台可见改回 uia/post(若目标支持)

拟人依赖真实桌面焦点与可见窗口。更多点击方式见 查找与点击