当前位置:首页 > 行业动态 > 正文

按键识别文字抢单代码

可基于Python+PyAutoGUI实现,监听指定热键后模拟鼠标点击购物车并提交订单,需配合定时

环境准备

# 所需第三方库
# pynput: 监听键盘事件
# pyautogui: 模拟键盘输入(可选)
# requests: 处理HTTP请求(根据实际需求)
# threading: 多线程处理
from pynput import keyboard
from pyautogui import press, write, hotkey
import time
import threading
import requests  # 根据实际需求选择是否使用

核心功能分解

按键监听与识别

# 定义全局变量控制监听状态
listener_running = True
def on_press(key):
    global listener_running
    try:
        # 组合键示例:Ctrl+Alt+Q 触发抢单
        if key == keyboard.Key.q and keyboard.Controller().ctrl_l and keyboard.Controller().alt_l:
            trigger_order_grab()
    except AttributeError:
        pass  # 非特殊按键直接忽略
def on_release(key):
    # 可添加按键释放逻辑(如退出监听)
    if key == keyboard.Key.esc:
        listener_running = False
        return False  # 停止监听
# 启动键盘监听
keyboard_listener = keyboard.Listener(on_press=on_press, on_release=on_release)
keyboard_listener.start()

抢单逻辑实现

def trigger_order_grab():
    # 模拟输入预定义文本(如:抢单确认语)
    write("已抢单!订单号:XXX-XXX")
    press('enter')
    # 或调用API接口(需根据实际业务调整)
    # response = requests.post("https://api.example.com/grab", json={"order_id": "123"})
    # if response.status_code == 200:
    #     print("抢单成功")
    # else:
    #     print("抢单失败")

多线程防阻塞

def start_listener():
    while listener_running:
        time.sleep(0.1)  # 降低CPU占用
# 后台线程运行监听器
thread = threading.Thread(target=start_listener, daemon=True)
thread.start()

单元表格

模块 功能描述 关键代码片段
keyboard.Listener 监听全局键盘事件,识别预设组合键(如 Ctrl+Alt+Q keyboard.Listener(on_press=on_press, ...)
trigger_order_grab 执行抢单操作(模拟输入或调用API) write("已抢单!订单号:XXX-XXX")
threading.Thread 后台线程运行监听器,避免主线程阻塞 threading.Thread(target=start_listener, ...)
random delay 模拟人工操作延迟,降低被检测风险(可选) time.sleep(random.uniform(0.5, 1.5))

相关问题与解答

问题1:如何适配不同操作系统的按键监听?

解答
pynput 库跨平台支持 Windows/Linux/Mac,但按键标识需注意:

  • Windows/Linux 使用 keyboard.Key.q 表示字母键
  • Mac 系统需通过 Key.qKeyCode.from_char('q')
    建议通过 key == 'q' 直接匹配字符(需开启 pynputKeyCode.from_char 转换)。

问题2:如何扩展为自动抓取订单数据?

解答

  1. 屏幕抓取:使用 pyautogui.screenshot()Pillow 截取订单信息区域,结合 OCR(如 Tesseract)解析文字。
  2. API集成:若平台提供开放接口,直接通过 requests 获取实时订单数据。
  3. 数据库存储:将抢单记录存入 SQLite/Redis,便于后续统计或冲突检测。

完整代码示例(简化版)

from pynput import keyboard
from pyautogui import write, press
import threading, time
listener_running = True
def on_press(key):
    try:
        if key == keyboard.Key.q and keyboard.Controller().ctrl_l and keyboard.Controller().alt_l:
            trigger_order_grab()
    except AttributeError:
        pass
def on_release(key):
    if key == keyboard.Key.esc:
        listener_running = False
        return False
def trigger_order_grab():
    write("已抢单!订单号:XXX-XXX")
    press('enter')
keyboard_listener = keyboard.Listener(on_press=on_press, on_release=on_release)
keyboard_listener.start()
while listener_running:
    time.sleep(0.1)
0