技术宅的结界

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

QQ登录

只需一步,快速开始

搜索
热搜: 下载 VB C 实现 编写
查看: 3579|回复: 4
收起左侧

【python】自动选课脚本

[复制链接]

35

主题

131

帖子

4485

积分

用户组: 真·技术宅

Jackeriss.com

UID
21
精华
7
威望
4 点
宅币
2227 个
贡献
2084 次
宅之契约
0 份
在线时间
252 小时
注册时间
2014-1-31

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

发表于 2014-12-16 22:09:56 | 显示全部楼层 |阅读模式

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

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

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

我针对云南大学选课系统写了一个快速选课的脚本,主要用到了模拟键盘事件和剪切板。
[Python] 纯文本查看 复制代码
#!/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])#将第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)

1041

主题

2327

帖子

5万

积分

用户组: 管理员

一只技术宅

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

1041

主题

2327

帖子

5万

积分

用户组: 管理员

一只技术宅

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

35

主题

131

帖子

4485

积分

用户组: 真·技术宅

Jackeriss.com

UID
21
精华
7
威望
4 点
宅币
2227 个
贡献
2084 次
宅之契约
0 份
在线时间
252 小时
注册时间
2014-1-31

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

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

手速实在拼不过!

17

主题

174

帖子

1250

积分

用户组: 上·技术宅

UID
3808
精华
5
威望
31 点
宅币
929 个
贡献
60 次
宅之契约
0 份
在线时间
184 小时
注册时间
2018-5-6
发表于 2018-12-16 01:24:49 | 显示全部楼层
我天好屌,orz
菜鸟一枚,直接指正,不必留情

本版积分规则

QQ|申请友链||Archiver|手机版|小黑屋|技术宅的结界 ( 滇ICP备16008837号|网站地图

GMT+8, 2019-8-19 07:29 , Processed in 0.106086 second(s), 36 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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