博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
uims选课
阅读量:6869 次
发布时间:2019-06-26

本文共 4294 字,大约阅读时间需要 14 分钟。

import urllib.requestimport http.cookiejarimport jsonimport hashlibimport sysimport timeimport queue as Queuefrom threading import Thread# AUTHOR: latyas / latyas@gmail.com /# Exams turn us to be ARTS students.#CONSTANT AREAUSERNAME = '学号'PASSWORD = '密码'CLASS = ['34551725',         '34186375'] #选课代码,自行查找,下次选课的时候再写。URL_PREFIX = 'http://uims.jlu.edu.cn/ntms/'class Worker(Thread):       worker_count = 0       def __init__( self, workQueue, resultQueue, timeout = 0, **kwds):           Thread.__init__( self, **kwds )           self.id = Worker.worker_count           Worker.worker_count += 1           self.setDaemon( True )           self.workQueue = workQueue           self.resultQueue = resultQueue           self.timeout = timeout           self.start( )       def run( self ):             while True:               try:                   callable, args, kwds = self.workQueue.get(timeout=self.timeout)                   res = callable(*args, **kwds)                   self.resultQueue.put(res)               except Queue.Empty:                   break               except :                   print('worker[%2d]' % self.id, sys.exc_info()[:2])                     class WorkerManager:       def __init__( self, num_of_workers=10, timeout = 1):           self.workQueue = Queue.Queue()           self.resultQueue = Queue.Queue()           self.workers = []           self.timeout = timeout           self._recruitThreads( num_of_workers )       def _recruitThreads( self, num_of_workers ):           for i in range( num_of_workers ):               worker = Worker( self.workQueue, self.resultQueue, self.timeout )               self.workers.append(worker)       def wait_for_complete( self):             while len(self.workers):               worker = self.workers.pop()               worker.join( )               if worker.isAlive() and not self.workQueue.empty():                   self.workers.append( worker )           print("All threadding jobs are are completed.")       def add_job( self, callable, *args, **kwds ):           self.workQueue.put( (callable, args, kwds) )       def get_result( self, *args, **kwds ):        if not self.resultQueue.empty():                  return self.resultQueue.get( *args, **kwds )        return Noneclass jsonExp(Exception):    def __init__(self):        passdef send_json_packet(datastr,url):    headers = {}    headers['Content-Type'] = 'application/json'        req = urllib.request.Request(url, json.dumps(json.loads(datastr)).encode(), headers)    ret = opener.open(req)            return retdef login_once(opener,username,password):    LOGIN_URL = URL_PREFIX + 'j_spring_security_check'    PASS_PREFIX = 'UIMS'    PASSWORD_ENCRYPTED = '' + hashlib.md5((PASS_PREFIX+username+password).encode()).hexdigest()    login_data = {
'j_username':USERNAME, 'j_password':PASSWORD_ENCRYPTED } ret = opener.open(LOGIN_URL,urllib.parse.urlencode(login_data).encode()) return retdef multi_process(id,sub_amount,timeout = 1): myworkers = WorkerManager(sub_amount,timeout) for i in id: myworkers.add_job(thread,i) myworkers.wait_for_complete() while True: res = myworkers.get_result() if res == None: print('Threads all done.') breakdef return_state(data): j = json.loads(data) try: ret = j['errno'] except: raise jsonExp() return retdef thread(i): print(i + ' is running....') select(i) time.sleep(0.01)def select(i): SELECT_COURSE = '{"lsltId":"%s","opType":"Y"}' URL = URL_PREFIX + 'selectlesson/select-lesson.do' while True: try: ret = send_json_packet(SELECT_COURSE % (i) ,URL).read().decode() errno = return_state(ret) if errno == 1410: print( i + ' selected successfully!') return except: raise jsonExp() continueopener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(http.cookiejar.CookieJar()))def main(): while True: try: login_once(opener,USERNAME,PASSWORD) multi_process(CLASS,len(CLASS)) except jsonExp: print('error, retrying.') continueif __name__ == "__main__": main()

 

转载于:https://www.cnblogs.com/latyas/archive/2013/06/06/3120329.html

你可能感兴趣的文章
通过ssl调用远程WebService
查看>>
体验async/await异步编程
查看>>
实战:Brocade交换机升级OS
查看>>
基于dubbo快速发布restful服务
查看>>
easyui的组合框combobox的取值与赋值
查看>>
测试管理工具 TestCenter5.5 已发布(2014-1-17)
查看>>
ArduinoYun教程之OpenWrt-Yun与CLI配置Arduino Yun
查看>>
php发送短信验证码完成注册功能
查看>>
一款强大的分析java源代码的插件
查看>>
集成服务入门(实验8)控制流
查看>>
kohana-如何创建和使用视图
查看>>
20160801习题
查看>>
Spring web mvc的响应过程
查看>>
Java System.exit(0)
查看>>
Perl Learning - 17 (/m, perl comcomand line, $^I, $ARGV)
查看>>
ansible部署mongoDB
查看>>
Oracle Data Guard broker 现场遇到bug ,闪之~
查看>>
Android中数据存储的几种方式
查看>>
从DAM到ADMP
查看>>
Python3 turtle安装和使用教程
查看>>