上一篇
按键识别文字抢单代码
- 行业动态
- 2025-05-12
- 7
可基于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.q
或KeyCode.from_char('q')
建议通过key == 'q'
直接匹配字符(需开启pynput
的KeyCode.from_char
转换)。
问题2:如何扩展为自动抓取订单数据?
解答:
- 屏幕抓取:使用
pyautogui.screenshot()
或Pillow
截取订单信息区域,结合 OCR(如Tesseract
)解析文字。 - API集成:若平台提供开放接口,直接通过
requests
获取实时订单数据。 - 数据库存储:将抢单记录存入 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)