-
Notifications
You must be signed in to change notification settings - Fork 2
/
App.py
657 lines (605 loc) · 92 KB
/
App.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
# !/usr/bin/python
# -*- coding: utf-8 -*-
"""
中国人民大学自动完成课程作业系统
"""
import base64
import io
from PIL import Image as pilImage
from tkinter import messagebox
from tkinter import *
from tkinter import ttk
from unrar import rarfile
from win32com import client as wc
import fnmatch
from pyquery import PyQuery as pq
from gevent import monkey
monkey.patch_all()
import urllib2, urllib, re, time, os, cookielib, inspect, codecs, random
class App(Frame):
file_base_path = 'C:\\Program Files\\autotask'
window = Tk()
qrcode_label = False
backgroud_img = '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'
def get_opener(self):
self.cookiejar = cookielib.CookieJar()
handler = urllib2.HTTPCookieProcessor(self.cookiejar)
opener = urllib2.build_opener(handler)
return opener
# 登录函数
def usr_log_in(self):
# 输入框获取用户名密码
usr_name = self.var_usr_name.get()
usr_pwd = self.var_usr_pwd.get()
code = self.var_code.get()
if usr_name == '' or usr_pwd == '':
messagebox.showerror(message='用户名或密码为空')
elif code == '':
messagebox.showerror(message='验证码不能为空')
else:
task = Task(usr_name, usr_pwd, code, self.cookiejar)
login_result = task.login()
if "loginok" in login_result:
self.window.destroy()
task.init_tk()
else:
messagebox.showerror(message='账号密码或验证码输入错误')
def init(self):
self.get_window_position()
self.window.title('中国人民大学自动完成课程作业系统')
self.window.resizable(0, 0)
self.window.geometry('790x220')
# 画布放置图片
canvas = Canvas(self.window, height=220, width=790)
login_bg_path = os.path.join(self.file_base_path, 'images', 'login_bg.gif')
file = open(login_bg_path, 'wb')
file.write(base64.b64decode(self.backgroud_img))
file.close()
imagefile = PhotoImage(file=login_bg_path)
canvas.create_image(0, 0, anchor='nw', image=imagefile)
canvas.pack(side='top')
# 标签 用户名密码
Label(self.window, text='账户:', bd=0, width=10).place(x=550, y=51)
Label(self.window, text='密码:', bd=0, width=10).place(x=550, y=81)
Label(self.window, text='验证码:', bd=0, width=10).place(x=550, y=121)
# 用户名输入框
self.var_usr_name = StringVar()
entry_usr_name = Entry(self.window, textvariable=self.var_usr_name, bd=1)
entry_usr_name.place(x=610, y=50)
# 密码输入框
self.var_usr_pwd = StringVar()
entry_usr_pwd = Entry(self.window, textvariable=self.var_usr_pwd, show='*', bd=1)
entry_usr_pwd.place(x=610, y=80)
# http: // learning.cmr.com.cn / member / SW_Code.asp?aid = 23000101 & f = html & ck = 1 & t = 1568002912633
# 验证码
self.var_code = StringVar()
entry_usr_code = Entry(self.window, textvariable=self.var_code, bd=1, width=8)
entry_usr_code.place(x=610, y=120)
self.get_qrcode()
# 登录 注册按钮
bt_login = Button(self.window, text='登录', command=self.usr_log_in, width=28, bd=0)
bt_login.place(x=550, y=150)
self.window.mainloop()
def get_qrcode(self):
if self.qrcode_label:
self.qrcode_label.destroy()
opener = self.get_opener()
opener.open("http://learning.cmr.com.cn/")
qrcode_result = opener.open(
"http://learning.cmr.com.cn/member/SW_Code.asp?aid=23000101&f=html&ck=1&t=1568002912633")
image_bytes = qrcode_result.read()
byte_stream = io.BytesIO(image_bytes)
roi_img = pilImage.open(byte_stream)
img_byte_arr = io.BytesIO()
roi_img.save(img_byte_arr, format='GIF')
img_byte_arr = img_byte_arr.getvalue()
qrcode_path = os.path.join(self.file_base_path, 'images', 'qrcode.gif')
with open(qrcode_path, "wb") as p:
p.write(img_byte_arr)
self.photo = PhotoImage(file=qrcode_path)
self.qrcode_button = Button(self.window, command=self.get_qrcode, bd=0, width=80, height=19, image=self.photo)
self.qrcode_button.place(x=670, y=120)
# 计算窗口居中的位置
def get_window_position(self):
sw = self.window.winfo_screenwidth()
# 得到屏幕宽度
sh = self.window.winfo_screenheight()
# 得到屏幕高度
ww = 790
wh = 220
# 窗口宽高为100
x = (sw - ww) / 2
y = (sh - wh) / 2
self.window.geometry("%dx%d+%d+%d" % (ww, wh, x, y))
def __init__(self, **kw):
if not os.path.exists(self.file_base_path): os.makedirs(self.file_base_path)
images_path = os.path.join(self.file_base_path, "images")
if not os.path.exists(images_path): os.makedirs(images_path)
Frame.__init__(self, **kw)
self.init()
# cookie = ""
# task = Task("", "", "", [], cookie)
# task.init_tk()
# task.run()
# 主循环
'''
作业类
'''
class Task:
# 登录的用户名和密码
username = ""
password = ""
url = "" # 作业请求地址
previous_cookie = "" # cookie
all_task_url = {} # 作业地址
treeview_item = 0
def init_tk(self):
window = Tk()
window.title("开始自动完成课程作业中")
window.geometry("1024x600")
window.resizable(0, 0)
sw = window.winfo_screenwidth()
# 得到屏幕宽度
sh = window.winfo_screenheight()
# 得到屏幕高度
ww = 1024
wh = 600
# 窗口宽高为100
x = (sw - ww) / 2
y = (sh - wh) / 2
window.geometry("%dx%d+%d+%d" % (ww, wh, x, y))
scr = Scrollbar(window)
columns = ("时间", "日志")
self.treeview = ttk.Treeview(window, height=18, show="headings", columns=columns, yscrollcommand=scr.set) # 表格
scr.config(command=self.treeview.yview)
scr.pack(side=RIGHT, fill=Y)
self.treeview.column("时间", width=224, anchor='center') # 表示列,不显示
self.treeview.column("日志", width=800, anchor='center')
self.treeview.heading("时间", text="时间") # 显示表头
self.treeview.heading("日志", text="日志")
self.treeview.pack(side=LEFT, fill=BOTH)
bt_login = Button(window, text='开始自动作业', command=self.run, width=50, bd=1)
bt_login.place(x=300, y=570)
def log_insert(self, value):
# 给表格中添加数据
if not (isinstance(value, str) or isinstance(value, unicode)):
value = str(value)
self.treeview.insert('', self.treeview_item,
values=(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()), value))
self.treeview_item += 1
self.treeview.pack(side=LEFT, fill=BOTH)
def __init__(self, username, password, code, cookie, previous_cookie=""):
# 第一个参数为第一层级,可能在这不太好理解,下篇文章中说到树状结构就理解了
self.username = username
self.password = password
self.code = code
for index, cookie in enumerate(cookie):
self.previous_cookie += cookie.name + '=' + cookie.value + ';'
self.previous_cookie += previous_cookie
def login(self):
login_result = self.getHtmlSource("http://learning.cmr.com.cn/member/checklogin.asp", data={
"userid": self.username,
"password": self.password,
"passcode": self.code,
"saveuserid": "",
"loginfrom": ""
})
login_result = login_result.decode("ISO-8859-1").encode('utf-8', 'ignore')
return login_result
'''
urllib2请求
'''
def getHtmlSource(self, url, data=None, source=False):
try:
# 建立带有cookie的opener
cookie = cookielib.CookieJar()
cookieProc = urllib2.HTTPCookieProcessor(cookie)
# 创建 "opener"
opener = urllib2.build_opener()
opener.add_handler(cookieProc)
# 使用 opener 获取一个URL
opener.open(url)
# 安装 opener.
urllib2.install_opener(opener)
headers = {
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
'Accept-Language': 'zh-CN,zh;q=0.8',
'Connection': 'keep-alive',
'Cookie': self.previous_cookie,
'Referer': 'http://learning.cmr.com.cn',
'User-Agent': self.randHeaderUserAgent(),
'Content-Type': 'text/html; charset=UTF-8'
}
# post数据
if data:
headers['Content-Type'] = 'application/x-www-form-urlencoded'
if not source:
data = urllib.urlencode(data)
url = urllib2.Request(url, data, headers)
else:
url = urllib2.Request(url, headers=headers)
# urllib2.urlopen 使用上面的opener.
ret = urllib2.urlopen(url)
# self.previous_cookie = ''
for index, cookie in enumerate(cookie):
self.previous_cookie += cookie.name + '=' + cookie.value + ';'
# print '请求完成,等待3秒!'
# time.sleep(3)
return ret.read()
except urllib2.HTTPError, e:
if e.code == 401:
print u"账号或密码错误!"
self.log_insert(u"账号或密码错误!")
return "authorization failed"
else:
raise e
except:
return None
'''
随机header用户头
'''
def randHeaderUserAgent(self):
head_user_agent = ['Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko',
'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.95 Safari/537.36',
'Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; rv:11.0) like Gecko)',
'Mozilla/5.0 (Windows; U; Windows NT 5.2) Gecko/2008070208 Firefox/3.0.1',
'Mozilla/5.0 (Windows; U; Windows NT 5.1) Gecko/20070309 Firefox/2.0.0.3',
'Mozilla/5.0 (Windows; U; Windows NT 5.1) Gecko/20070803 Firefox/1.5.0.12',
'Opera/9.27 (Windows NT 5.2; U; zh-cn)',
'Mozilla/5.0 (Macintosh; PPC Mac OS X; U; en) Opera 8.0',
'Opera/8.0 (Macintosh; PPC Mac OS X; U; en)',
'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.12) Gecko/20080219 Firefox/2.0.0.12 Navigator/9.0.0.6',
'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Win64; x64; Trident/4.0)',
'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0)',
'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2; .NET4.0C; .NET4.0E)',
'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Maxthon/4.0.6.2000 Chrome/26.0.1410.43 Safari/537.1 ',
'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2; .NET4.0C; .NET4.0E; QQBrowser/7.3.9825.400)',
'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:21.0) Gecko/20100101 Firefox/21.0 ',
'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.92 Safari/537.1 LBBROWSER',
'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0; BIDUBrowser 2.x)',
'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.11 TaoBrowser/3.0 Safari/536.11']
return head_user_agent[random.randrange(0, len(head_user_agent))]
'''
获取未完成作业路径
'''
def getNotTask(self):
item_title = ""
url = "http://learning.cmr.com.cn/myCourse/homeworkList.asp"
print u'获取未完成作业列表...'
self.log_insert(u'获取未完成作业列表...')
html = self.getHtmlSource(url)
if "window.top.location.href" in html:
print u"账号或密码错误!"
self.log_insert(u'账号或密码错误!')
return "authorization failed"
regex_content = re.compile(
'<tr.*?>.*?<td.*?>\s?(.*?)</td>.*?<td.*?>(.*?)</td>.*?<td.*?>(.*?)</td>\s*</tr>',
re.S)
items = re.findall(regex_content, html.decode('gb2312').encode('utf-8'))
for item in items:
item_title = str(item[0]).decode('utf-8')
surplus = 0
if item[2].isdigit():
surplus = int(item[1]) - int(item[2])
if surplus > 0:
print item_title + u':剩余' + str(surplus).decode('ascii') + u'项作业未完成!'
self.log_insert(item_title + u':剩余' + str(surplus).decode('ascii') + u'项作业未完成!')
subject_list_url = "http://learning.cmr.com.cn/myCourse/mycourse.asp"
subject_list_html = self.getHtmlSource(subject_list_url)
# print subject_list_html
d = pq(subject_list_html)
subject_list_items = d(".mycourse").find('div').children('a')
for subject_list_item in subject_list_items:
if item_title == pq(subject_list_item).text()[0:-1]:
task_url = pq(subject_list_item).attr('href')
print task_url
self.log_insert(task_url)
task_html = self.getHtmlSource(task_url)
regex_content = re.compile(
'{\'courseid\':\'(.*?)\'}',
re.S)
task_items = re.findall(regex_content, task_html)
if task_items:
self.all_task_url[
item_title] = "http://learning.cmr.com.cn/student/acourse/HomeworkCenter/index.asp?courseid=" + \
task_items[0]
else:
print u'无法完成该科目!' + item_title
self.log_insert(u'无法完成该科目!' + item_title)
print self.all_task_url
self.log_insert(self.all_task_url)
else:
print item_title + u':已完成全部作业'
self.log_insert(item_title + u':已完成全部作业')
else:
print u'已完成全部作业'
self.log_insert(item_title + u':已完成全部作业')
'''
下载答案
'''
def downloadTask(self, html):
regex_content = re.compile(
'<div.*?class="button_blue2".*?href=\"(.+?)\"',
re.S)
items = re.findall(regex_content, html)
print "downloading with urllib"
self.log_insert("downloading with urllib")
filedir_child = os.path.join(App.file_base_path, "task") # 解压后放入的目录
filedir = os.path.join(filedir_child, "task_" + time.strftime('%Y%m%d%H%I%S')) # 解压后放入的目录
if not os.path.isdir(filedir_child): os.mkdir(filedir_child)
if not os.path.isdir(filedir): os.mkdir(filedir)
rar_path = os.path.join(filedir, "task.rar")
if not items:
print u'无法完成主观题!'
self.log_insert(u'无法完成主观题!')
return False
print items[0] + '=======>' + rar_path # 下载地址
self.log_insert(items[0] + '=======>' + rar_path)
urllib.urlretrieve(items[0], rar_path)
print "download finish"
self.log_insert("download finish")
print "unrar...!"
self.log_insert("unrar...!")
file = rarfile.RarFile(rar_path) # 这里写入的是需要解压的文件,别忘了加路径
file.extractall(filedir) # 这里写入的是你想要解压到的文件夹
print "unrar finish!"
self.log_insert("unrar finish!")
answer_path = self.translate(filedir)
if not os.path.exists(answer_path):
notic = "自动转换失败,请将:" + filedir + " 下的word文件,复制为txt文件保存到:" + answer_path + "后按回车键!"
raw_input(notic.decode('utf-8').encode('gbk'))
print answer_path
self.log_insert(answer_path)
# 返回答案结果
reader = codecs.open(answer_path, 'r', 'gbk', 'ignore')
return reader.read()
'''
将一个目录下所有doc和docx文件转成txt
该目录下创建一个新目录data
新目录下fileNames.txt创建一个文本存入所有的word文件名
本版本具有一定的容错性,即允许对同一文件夹多次操作而不发生冲突
'''
def translate(self, path):
all_FileNum = 0
debug = 0
if debug:
print path
# 该目录下所有文件的名字
files = os.listdir(path)
# 该目下创建一个新目录data,用来放转化后的txt文本
New_dir = os.path.abspath(os.path.join(path, 'data'))
if not os.path.exists(New_dir):
os.mkdir(New_dir)
if debug:
print New_dir
# 创建一个文本存入所有的word文件名
fileNameSet = os.path.abspath(os.path.join(New_dir, 'fileNames.txt'))
o = open(fileNameSet, "w")
wordapp = False
try:
for filename in files:
if debug:
print filename
# 如果不是word文件:继续
if not fnmatch.fnmatch(filename, '*.doc') and not fnmatch.fnmatch(filename, '*.docx'):
continue
# 如果是word临时文件:继续
if fnmatch.fnmatch(filename, '~$*'):
continue
if debug:
print filename
docpath = os.path.abspath(os.path.join(path, filename))
# 得到一个新的文件名,把原文件名的后缀改成txt
new_txt_name = ''
if fnmatch.fnmatch(filename, '*.doc'):
new_txt_name = filename[:-4] + '.txt'
else:
new_txt_name = filename[:-5] + '.txt'
if debug:
print new_txt_name
word_to_txt = os.path.join(os.path.join(path, 'data'), new_txt_name)
wordapp = wc.Dispatch('Word.Application')
doc = wordapp.Documents.Open(docpath)
# 为了让python可以在后续操作中r方式读取txt和不产生乱码,参数为4
doc.SaveAs(word_to_txt, 4)
doc.Close()
o.write(word_to_txt + '\n')
all_FileNum += 1
finally:
wordapp.Quit()
return word_to_txt
'''
进度条
'''
def Schedule(self, a, b, c):
'''''
a:已经下载的数据块
b:数据块的大小
c:远程文件的大小
'''
per = 100.0 * a * b / c
if per > 100:
per = 100
self.pbar.update(per)
'''
获取问题,并提交答案
'''
def get_question(self, answer_data, task_html, task_url):
print u'开始做题'
self.log_insert(u'开始做题')
# 匹配问题列表
items = pq(task_html).find('div[class="button_red"]')
if not (items):
print u'该科目作业已完成了'
self.log_insert(u'该科目作业已完成了')
# items = pq(task_html).find('div[class="button_green"]')
for item in items:
item = pq(item).children('a').attr('href')
# 匹配单个问题url
print 'http://learning.cmr.com.cn/student/acourse/HomeworkCenter/' + item
self.log_insert('http://learning.cmr.com.cn/student/acourse/HomeworkCenter/' + item)
question_html = self.getHtmlSource(task_url + item)
# 匹配重做
re_try = re.search(re.compile('<input.*?name=\"button\".*?onclick=\"fn_ToNewHomeWork\(\);\"', re.S),
question_html)
if re_try != None:
print u'重做...'
re_try_data = {}
re_try_data['CourseID'] = \
re.findall(re.compile('<input.*?name=\"CourseID\".*?value=\"(.*?)\"', re.S), question_html)[0]
re_try_data['PMID'] = \
re.findall(re.compile('<input.*?name=\"PMID\".*?value=\"(.*?)\"', re.S), question_html)[
0]
question_html = self.getHtmlSource(
'http://learning.cmr.com.cn/student/acourse/HomeworkCenter/PracDeal.asp', re_try_data)
question_regex = u'【([^】]*)】'
regex_content = re.compile(
question_regex.encode('gbk'),
re.S)
question_num_items = re.findall(regex_content, question_html)
answer = ''
# print chardet.detect(answer_data)
# 多线程匹配问题答案
for question_num_item in question_num_items:
answer += self.find_answer(question_num_item, answer_data)
# 获取提交答案路径
regex_content = re.compile(
'<form.*?id="form1".*?name="form1".*?action="(.*?)"',
re.S)
post_question_url_items = re.findall(regex_content, question_html)
if not post_question_url_items:
print u'该作业无法完成'
self.log_insert(u'该作业无法完成')
continue
if re_try != None:
post_question_url = 'http://learning.cmr.com.cn/student/acourse/HomeworkCenter/SavePracDeal.asp'
else:
post_question_url = task_url + post_question_url_items[0]
# 创建post体
data = answer
data += 'CourseID=' + \
re.findall(re.compile('<input.*?name=\"CourseID\".*?value=\"(.*?)\"', re.S), question_html)[0] + '&'
data += 'PMID=' + re.findall(re.compile('<input.*?name=\"PMID\".*?value=\"(.*?)\"', re.S), question_html)[
0] + '&'
data += 'tmpSID=' + \
re.findall(re.compile('<input.*?name=\'tmpSID\'.*?value=\'(.*?)\'', re.S), question_html)[
0] + '&'
data += 'strStandardScore=' + \
re.findall(re.compile('<input.*?name=\'strStandardScore\'.*?value=\'(.*?)\'', re.S), question_html)[
0]
# post提交答案
# test_url = 'http://192.168.92.129/Welcome/test11'
print u'延迟10秒提交答案...'
self.log_insert(u'延迟10秒提交答案...')
time.sleep(10)
result = self.getHtmlSource(post_question_url, data, True)
print data
self.log_insert(data)
score = self.getScore(result)
if score:
print score
self.log_insert(score.decode("GB2312"))
print u'该科目作业已全部完成!!'
self.log_insert(u'该科目作业已全部完成!!')
'''
查找问题答案
'''
def find_answer(self, question_num_item, answer_data):
answer = ''
# 匹配问题答案
answer_regex = u'案】'
# 多项选择题
question_regex = question_num_item + '[^' + u'案' + ']*' + answer_regex + '([A-Z],[^\n\r]+)'
regex_content = re.compile(
question_regex,
re.S)
checkbox_items = re.findall(regex_content, answer_data)
if checkbox_items:
for item in checkbox_items[0].split(','):
answer += question_num_item + '=' + item + '&'
else:
question_regex = question_num_item + '[^' + u'案' + ']*' + answer_regex + '([A-Z])'
regex_content = re.compile(
question_regex,
re.S)
# 单项选择题
radio_items = re.findall(regex_content, answer_data)
if radio_items:
answer += question_num_item + '=' + radio_items[0] + '&'
else:
# 判断题
question_regex = question_num_item + '[^' + u'案' + ']*' + answer_regex + u'(正确|错误)'
regex_content = re.compile(
question_regex,
re.S)
judge_items = re.findall(regex_content, answer_data)
if judge_items:
if judge_items[0] == u'正确':
answer += question_num_item + '=' + 1 + '&'
else:
answer += question_num_item + '=' + 0 + '&'
return answer
'''
获取作业得分
'''
def getScore(self, html):
regex_content = re.compile(
'<div.*?class=\"line1\".*?>.*?<p>(.*?)</p>',
re.S)
items = re.findall(regex_content, html)
if not items:
print u'提交数据失败!'
self.log_insert(u'提交数据失败!')
return False
return items[0]
'''
获取项目根目录
'''
def script_path(self):
caller_file = inspect.stack()[1][1] # caller's filename
return os.path.abspath(os.path.dirname(caller_file)) # path
'''
开始完成各科目作业
'''
def work_task(self, index):
print u'开始完成' + index + u'课程...'
self.log_insert(u'开始完成' + index + u'课程...')
self.url = self.all_task_url[index]
html = self.getHtmlSource(self.url)
if html == None:
print u'服务器异常,请稍后再试!'
self.log_insert(u'服务器异常,请稍后再试!')
return False
items = regex_content = re.compile(
'<iframe.*?id="iframe".*?src=\"(.+?)\"',
re.S)
items = re.findall(regex_content, html)
if not items:
print u'服务器异常,请稍后再试!'
self.log_insert(u'服务器异常,请稍后再试!')
return False
task_url = items[0]
print task_url
self.log_insert(task_url)
regex_content = re.compile(
'(.*?\/.*?)[^\/]*\.asp.*?',
re.S)
task_url_items = re.findall(regex_content, self.url)
task_html = self.getHtmlSource(task_url_items[0] + task_url)
answer_data = self.downloadTask(task_html)
if not answer_data:
return False
self.get_question(answer_data, task_html, 'http://learning.cmr.com.cn/student/acourse/HomeworkCenter/')
'''
启动
'''
def run(self):
items = self.treeview.get_children()
for item in items:
self.treeview.delete(item)
self.getNotTask()
for url in self.all_task_url:
self.work_task(url)
def __del__(self):
self.previous_cookie = ''
App()