背景
因为我手速慢,总是抢不到预约的机时。故写此脚本。
原理
因为网页是JavaScript生成。使用PyHook3监听鼠标和键盘事件;使用pyautogui控制鼠标键盘。
-
安装第三方库 建议Python 3使用PyHook3库。(我在上面走了很多弯路) 而pyHook易产生路径错误(TypeError: MouseSwitch() missing 8 required positional arguments: ‘msg’, ‘x’, ‘y’, ‘data’, ‘flags’, ‘time’, ‘hwnd’, and ‘window_name’),不推荐使用。 安装PyHook3的教程:https://www.cnblogs.com/maybaco/p/13336851.html
其中我在安装时遇到需要有Microsoft Visual Studio C++ 14.0 is required的要求,所以还需要不断的配制环境。网络上直接装的包我也总是报错(安装包损坏...)最后按照这个乖乖下载...配制教程为:https://zhuanlan.zhihu.com/p/165008313
使用方法
运行程序,在需要拖拽确认的地方拟拖拽(拖拽前可进行简单的单击,以改变操作窗口),然后按F2键结束脚本监听学习的部分。后有5秒时间,简单调整鼠标的位置及状态。最后将重复循环鼠标拖拽。
代码
import PyHook3
import pythoncom
import win32api
import time
import pyautogui
def onKeyboardEvent(event):
if str(event.Key)=='F2':
win32api.PostQuitMessage()
time.sleep(5)
return True
def onMouseEvent(event):
lp.append(event.Position)
return True
def click(lp):
loop = True
while(loop):
if lp[0] == lp[1]:
lp.pop(0)
lp.pop(0)
else:
loop = False
print("你的位置是{0}->{1}".format(lp[0], lp[1]))
x = lp[1][0] - lp[0][0]
y = lp[1][1] - lp[0][1]
pyautogui.moveTo(lp[0][0], lp[0][1])
pyautogui.dragRel(x, y, 0.1)
time.sleep(0.1)
pyautogui.press('enter')
def main():
global lp
lp = []
hm = PyHook3.HookManager()
hm.KeyDown = onKeyboardEvent
hm.HookKeyboard()
hm.MouseAllButtonsDown = onMouseEvent
hm.MouseAllButtonsUp = onMouseEvent
hm.HookMouse()
pythoncom.PumpMessages()
hm.UnhookKeyboard()
hm.UnhookKeyboard()
for i in range (10):
click(lp)
pyautogui.alert(text='Finished.', title='Auto Click Script')
main()
|