You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Python+ADB实现快速点击 解决点击间隔1秒延迟问题

核心延迟原因

你当前代码的性能瓶颈来自每次循环调用device.shell()都会重新创建一次adb shell会话,单次会话的建立开销在数百毫秒到1秒区间,这就是两次点击间隔过长的根本原因。

可用优化方案

方案1:批量合并命令单次发送(改动最小,优先推荐)

如果你的点击序列是提前可预知的,直接把所有点击命令拼接为一条指令,仅调用一次device.shell()即可,点击之间的延迟会降到input命令本身的执行开销(<10ms):

from ppadb.client import Client
import time

def Get_device_adb():
    adb = Client(host="127.0.0.1", port=5037)
    devices = adb.devices()
    if len(devices) == 0:
        print("No device attached")
        quit()
    return devices[0]

device = Get_device_adb()
taps = [(225, 750), (350, 800), ...]
# 拼接所有点击命令,分号分隔
tap_command = " ; ".join([f"input tap {x} {y}" for x, y in taps])
# 单次执行所有点击
device.shell(tap_command)

方案2:复用交互式Shell会话(适合动态生成点击的场景)

如果你的点击坐标需要运行时动态计算,无法提前批量拼接,可以创建长期存活的交互式shell会话,避免每次发送命令都重建连接:

# 建立持续存活的shell流
shell_stream = device.shell_stream()

# 动态发送点击命令
for tap in dynamic_generated_taps: # 这里替换为你动态生成的点击坐标列表
    shell_stream.write(f"input tap {tap[0]} {tap[1]}\n".encode())
    shell_stream.flush()
    # 如需自定义点击间隔可在此加 time.sleep(xx),单位为秒

# 用完关闭会话
shell_stream.close()

方案3:使用sendevent直接模拟硬件输入(极致性能需求可选)

如果需要毫秒级的连续点击响应,可以直接调用sendevent命令向触摸输入设备写入原始事件,相比input tap省去了框架层的封装开销,速度会再提升数倍。你需要先通过adb shell getevent -p查询你设备的触摸设备编号、X/Y轴取值范围,再拼接对应的事件序列发送即可。

注意:多数游戏会设置点击频率检测阈值,过于密集的点击可能触发脚本检测机制,可根据需求自行在两次点击之间添加短时间sleep调整间隔。

内容的提问来源于stack exchange,提问作者Ran42

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 01:18:02