Jackeriss 发表于 2014-12-16 22:09:56

【python】自动选课脚本

本帖最后由 Jack 于 2014-12-16 22:16 编辑

我针对云南大学选课系统写了一个快速选课的脚本,主要用到了模拟键盘事件和剪切板。
#!/usr/bin/env python
#-*- encoding: gbk -*-
import pyHook#用于键盘监听
import pythoncom
import sys
import os.path
import win32clipboard as w
import win32con
import win32api
import thread
from time import sleep   
from ctypes import *

code_file = open("选课代码.txt", 'r')
code = code_file.read().strip("\n")
code_list = code.split('\n')#得到由选课代码组成的列表

def onKeyboardEvent(event):
    if str(event.Key)=='Escape':#若输入“Esc”则将所有用到的按键复位并退出
      win32api.keybd_event(86,0,win32con.KEYEVENTF_KEYUP,0)
      win32api.keybd_event(17,0,win32con.KEYEVENTF_KEYUP,0)
      win32api.keybd_event(13,0,win32con.KEYEVENTF_KEYUP,0)
      win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)
      sys.exit()
    return True

def quiting():
    hm = pyHook.HookManager()#键盘监听
    hm.KeyDown = onKeyboardEvent
    hm.HookKeyboard()
    pythoncom.PumpMessages()
   
def setText(aString):#设置剪切板内容
    w.OpenClipboard()
    w.EmptyClipboard()
    w.SetClipboardData(win32con.CF_TEXT, aString)
    w.CloseClipboard()
   
if __name__=='__main__':
    sleep(3)
    thread.start_new_thread(quiting,())#用一个进程监听键盘输入
    while 1 :
      for i in range(0,len(code_list)):
            windll.user32.SetCursorPos(335, 236)#改变鼠标位置至输入框前端
            win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)#鼠标左键复位
            setText(code_list)#将第i条代码写入剪切板
            win32api.keybd_event(17,0,0,0)#按下Ctrl键
            win32api.keybd_event(86,0,0,0)#按下c键
            win32api.keybd_event(86,0,win32con.KEYEVENTF_KEYUP,0)#ctrl键复位
            win32api.keybd_event(17,0,win32con.KEYEVENTF_KEYUP,0)#c键复位
            windll.user32.SetCursorPos(760, 236)#改变鼠标位置至“加入选课单按钮”
            win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)#按下鼠标左键
            win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)#鼠标左键复位
            sleep(0.1)
            win32api.keybd_event(13,0,0,0)#按下Enter键
            win32api.keybd_event(13,0,win32con.KEYEVENTF_KEYUP,0)#Enter键复位
            windll.user32.SetCursorPos(518, 236)#改变鼠标位置至输入框后端
            win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)#按下鼠标左键
            sleep(0.1)

0xAA55 发表于 2014-12-18 03:15:17

原理很直白,就是“代劳”。

0xAA55 发表于 2014-12-18 03:15:18

原理很直白,就是“代劳”。

Jackeriss 发表于 2014-12-18 22:43:00

0xAA55 发表于 2014-12-18 03:15
原理很直白,就是“代劳”。

手速实在拼不过!

watermelon 发表于 2018-12-16 01:24:49

我天好屌,orz
页: [1]
查看完整版本: 【python】自动选课脚本