找回密码
 立即注册→加入我们

QQ登录

只需一步,快速开始

搜索
热搜: 下载 VB C 实现 编写
查看: 10515|回复: 4

【python】自动选课脚本

[复制链接]
发表于 2014-12-16 22:09:56 | 显示全部楼层 |阅读模式

欢迎访问技术宅的结界,请注册或者登录吧。

您需要 登录 才可以下载或查看,没有账号?立即注册→加入我们

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

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

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

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

  24. def quiting():
  25.     hm = pyHook.HookManager()#键盘监听
  26.     hm.KeyDown = onKeyboardEvent  
  27.     hm.HookKeyboard()  
  28.     pythoncom.PumpMessages()
  29.    
  30. def setText(aString):#设置剪切板内容
  31.     w.OpenClipboard()
  32.     w.EmptyClipboard()
  33.     w.SetClipboardData(win32con.CF_TEXT, aString)
  34.     w.CloseClipboard()
  35.    
  36. if __name__=='__main__':
  37.     sleep(3)
  38.     thread.start_new_thread(quiting,())#用一个进程监听键盘输入
  39.     while 1 :
  40.         for i in range(0,len(code_list)):
  41.             windll.user32.SetCursorPos(335, 236)#改变鼠标位置至输入框前端
  42.             win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)#鼠标左键复位
  43.             setText(code_list[i])#将第i条代码写入剪切板
  44.             win32api.keybd_event(17,0,0,0)#按下Ctrl键
  45.             win32api.keybd_event(86,0,0,0)#按下c键
  46.             win32api.keybd_event(86,0,win32con.KEYEVENTF_KEYUP,0)#ctrl键复位
  47.             win32api.keybd_event(17,0,win32con.KEYEVENTF_KEYUP,0)#c键复位
  48.             windll.user32.SetCursorPos(760, 236)#改变鼠标位置至“加入选课单按钮”
  49.             win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)#按下鼠标左键
  50.             win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)#鼠标左键复位
  51.             sleep(0.1)
  52.             win32api.keybd_event(13,0,0,0)#按下Enter键
  53.             win32api.keybd_event(13,0,win32con.KEYEVENTF_KEYUP,0)#Enter键复位
  54.             windll.user32.SetCursorPos(518, 236)#改变鼠标位置至输入框后端
  55.             win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)#按下鼠标左键
  56.             sleep(0.1)
复制代码

回复

使用道具 举报

发表于 2014-12-18 03:15:17 来自手机 | 显示全部楼层
原理很直白,就是“代劳”。
回复 赞! 靠!

使用道具 举报

发表于 2014-12-18 03:15:18 来自手机 | 显示全部楼层
原理很直白,就是“代劳”。
回复 赞! 靠!

使用道具 举报

 楼主| 发表于 2014-12-18 22:43:00 | 显示全部楼层
0xAA55 发表于 2014-12-18 03:15
原理很直白,就是“代劳”。

手速实在拼不过!
回复 赞! 靠!

使用道具 举报

发表于 2018-12-16 01:24:49 | 显示全部楼层
我天好屌,orz
回复 赞! 靠!

使用道具 举报

本版积分规则

QQ|Archiver|小黑屋|技术宅的结界 ( 滇ICP备16008837号 )|网站地图

GMT+8, 2024-11-21 20:50 , Processed in 0.038693 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表