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

QQ登录

只需一步,快速开始

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

【python】自动选课脚本

[复制链接]

35

主题

96

回帖

4754

积分

用户组: 真·技术宅

UID
21
精华
7
威望
5 点
宅币
2311 个
贡献
2269 次
宅之契约
0 份
在线时间
261 小时
注册时间
2014-1-31

最佳新人活跃会员热心会员

发表于 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)
复制代码

回复

使用道具 举报

1111

主题

1651

回帖

7万

积分

用户组: 管理员

一只技术宅

UID
1
精华
244
威望
743 点
宅币
24235 个
贡献
46222 次
宅之契约
0 份
在线时间
2296 小时
注册时间
2014-1-26
发表于 2014-12-18 03:15:17 来自手机 | 显示全部楼层
原理很直白,就是“代劳”。
回复 赞! 靠!

使用道具 举报

1111

主题

1651

回帖

7万

积分

用户组: 管理员

一只技术宅

UID
1
精华
244
威望
743 点
宅币
24235 个
贡献
46222 次
宅之契约
0 份
在线时间
2296 小时
注册时间
2014-1-26
发表于 2014-12-18 03:15:18 来自手机 | 显示全部楼层
原理很直白,就是“代劳”。
回复 赞! 靠!

使用道具 举报

35

主题

96

回帖

4754

积分

用户组: 真·技术宅

UID
21
精华
7
威望
5 点
宅币
2311 个
贡献
2269 次
宅之契约
0 份
在线时间
261 小时
注册时间
2014-1-31

最佳新人活跃会员热心会员

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

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

使用道具 举报

29

主题

315

回帖

1561

积分

用户组: 上·技术宅

UID
3808
精华
11
威望
105 点
宅币
702 个
贡献
165 次
宅之契约
0 份
在线时间
404 小时
注册时间
2018-5-6
发表于 2018-12-16 01:24:49 | 显示全部楼层
我天好屌,orz
Passion Coding!
回复 赞! 靠!

使用道具 举报

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

GMT+8, 2024-4-20 13:35 , Processed in 0.044184 second(s), 32 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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