注册获取更多资料
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
* A+ I& o. M8 a uPython 是个好东西。
2 l3 v# J0 i. p& H# v6 H1 F* d! [' [& W2 J# Z
- from selenium import webdriverimport time# e- ?; M: x# G8 u( J( S# V
- #import pandas as pd: L, ]: b7 V2 m, V
- from selenium.webdriver.common.by import By
. H2 E! \* b' G; _ - from selenium.webdriver.support.wait import WebDriverWait' _9 P" _6 o" R" `5 n
- from selenium.webdriver.common.action_chains import ActionChains
. h; c( F7 v: W" g& w; [$ i+ I' u - from selenium.webdriver.support import expected_conditions as EC
t4 e$ y; U& T1 @! E7 N1 T, k - #import writer_file: M1 a1 E3 S' [2 U
- import re+ U$ g9 V5 A: E2 i
-
' m3 v, J" l& T% c2 z$ { -
5 @7 i2 O+ }+ Z# f9 h- G - class Shuake():
# ?0 d O5 r: C - """docstring for ClassName"""
* o/ r, k& }- F% g8 e - ( i4 b7 f2 j0 ?: x8 r
- def __init__(self):
' G' N+ U3 Z% N# n; J - #super(ClassName, self).__init__()& a! [+ x2 K% v! {' C& m
- # 谷歌浏览器6 K( o9 g9 w1 k. p
- self.username = '账号'
- y4 v" R3 s4 k/ y - self.userpassword = '密码'
, F! c6 I, ?$ @. M0 ]1 b6 v/ P - driver_path = r'F:\project\chromedriver.exe'
& J4 b9 k- M* w9 P - self.driver = webdriver.Chrome(executable_path=driver_path)
* b2 Q" J s& D% T- \9 S - ! k# @+ e# K" W+ e
- def login_jiaoyu(self):
0 ~' [3 x+ m+ j3 d8 u; Y3 P - # 账号密码; [ z! v$ {+ K7 j$ f* A
- self.driver.get("http://g.cjnep.net/lms/web/default/login")$ ^2 E" `; _, Y2 ^& g7 O
- # 用户名,密码& c9 h4 n" n. [6 J2 s
- username_input = self.driver.find_element_by_xpath('//*[@id="username"]')9 P9 D6 J5 D) ]2 l5 M: t3 C9 d
- username_input.click()
$ n! G$ S. I' c4 C, l - time.sleep(0.5)
, F }* e0 L1 C6 k: Q2 Q3 E - username_input.send_keys(self.username) w5 c1 M/ I* W
- time.sleep(0.5)
) ?* {( z0 v# l7 Q3 s - userpassword_input = self.driver.find_element_by_xpath('//*[@id="password"]')
* m+ c$ m9 ~: t - userpassword_input.send_keys(self.userpassword) Y6 S5 m. n/ j
- print('请输入验证码,然后点击登录')% o2 Z, H6 ?9 i7 _
- # 等待检测是否登录成功
' f8 ~9 U+ d, O) T& B# x - wait = WebDriverWait(self.driver, 100). [$ ^' _3 g' @7 m6 I& U" C$ x/ o
- shouye_button = wait.until(EC.element_to_be_clickable((By.CLASS_NAME, 'active')))+ P7 \: p, N w9 a9 x: j
- print("登录成功")' G, `- \* \6 I( G6 j
-
& G7 U% u& N) ^% v7 K1 ~& b9 s - def my_course(self):
0 D0 {6 w7 C- o: C - """打开我的课程界面"""
2 p& ]$ I7 S# e, g5 N- {% N: h' D -
' e! x& ?9 @# o' e6 r/ V( |5 K1 X" F - print("打开课程界面")
1 a$ W$ Q/ x/ G# ^0 [0 q - self.driver.get("http://g.cjnep.net/lms/web/course/index")$ p/ q( g: ~$ E5 r* z
- # 获取网页源码; k+ z# c# P& W
- my_course_source = self.driver.page_source
- l% f) H4 U- b' n" } - #writer_file.write_file('kk.txt', my_course_source)& \& u3 d! [' g7 W( i2 f
- # 获取课程列表5 W. f, ^/ [* t+ ~8 A0 V
- my_course_source = my_course_source[my_course_source.find('默认;'):]- T9 K; ?, Q" B
- # 课程名称
; H% j- j# G/ \9 M; n - course_name = re.findall('class="namediv"><span.*">(.*)</span>(.*)</div>', my_course_source)2 [( ^7 S5 H0 i. d2 S2 g
- # print(course_name)& }0 g6 C( k* T9 s
- # 课程链接0 Q, n$ | ^ V4 e- S3 K
- course_url = re.findall('href="/(.*)">进入学习</a></div>', my_course_source)' x4 x! q) B$ M, R2 O/ d0 g
- # print(course_url)
' e1 X" y0 d) t8 ~ - # 学习进度
. u- `6 {/ h) D2 x3 b - course_complete = re.findall(/ D5 [2 k4 r. @% c% ]- L
- '<div class="otherdiv">(.*)<span>(.*)<font>(.*)</font></span> </div>', my_course_source)
5 x- }4 P# I0 \ - # print(course_complete), @) c w% ]+ y1 f7 h. U0 Y
- # 学期 课程名称 主讲老师 完成率 课程链接( J, K3 q& Q2 n
- courses_page_list = []
9 Q4 L6 i( C D; c" X! S" \- c - for x in range(0, len(course_name)):
: G* s: _) A8 |; l' v - term = course_name[x][0]/ E6 r& f: V4 G- B; v
- name = course_name[x][1]. y; A3 R c, a+ o) f
- url = course_url[x]
3 A$ \- i$ {+ F6 m - teacher = course_complete[x][0]
9 h8 x; p% y. d, ]# }: J+ _ - speed = course_complete[x][2]! B0 _% d" h: G4 m( [' o0 m
- print(str(x + 1) + "===" + term + "===" + name + "===" + teacher +! S; X: [+ M% v3 v. [5 i$ Y* u u; w! G
- "===学习完成:" + speed + "===http://g.cjnep.net/" + url)
; ]9 \. F8 a3 a) u/ _ - courses_page_list.append([term, name, "http://g.cjnep.net/" + url, teacher, speed])1 t4 ?" J( }) p, d O3 s
-
. v- V% A7 x m. i9 ~ - return courses_page_list I4 k6 r C. j
- 1 L( |/ ?/ G# m `6 x! w
- def num_input(self, max_num):+ ?% z* W& ?* [" |; B: r$ L
- """用户输入"""
2 o: e5 ?0 @! z( f0 X, r: S - max_num_1 = max_num* U6 n% @8 X# T
- while True:
% M* u9 C2 C) I) y - try:
' D$ ]/ P% K* o& u - num = int(input("输入数字序号1~{}之间选择开始学习的视频:".format(max_num_1)))
S @8 M s3 `# Y; ?# q - if num > max_num_1 or num < 1:) T; O1 ?3 j) ~2 T, Z! j
- num = int("x") e( }: A1 m3 n* s, S) g
- break
! w7 B" @; X' ~8 b8 ~9 j6 U2 D2 @. a - except Exception as e:
' \/ V+ \' u( t* d, F/ Q& Y; v- U4 U - print("输入错误,请再输入一遍")
) I6 q5 }3 E1 L! Q - return num" e k `' u o. i6 D
-
7 d1 R" j0 v5 J7 Q - def course_list(self, courses_page_list):
0 d+ F0 E- C6 e; g. | - """获取单科课程播放列表"""
/ {% b6 |' M/ T/ P: l+ s - num = self.num_input(len(courses_page_list))
' E( Y( ~& x1 v - print(courses_page_list[num - 1][2])0 V2 k7 e( k" k, G% m
- self.driver.get(courses_page_list[num - 1][2])
. D0 Y8 Z _8 O: M" p3 b; ?! H - # 打开单科课程列表5 n+ C; w1 N6 r/ U
- my_course_source = self.driver.page_source
% k4 r) ~. a9 T+ A5 L. y - #writer_file.write_file('55.txt', my_course_source)
/ |8 _! I: o5 M4 l - # 等待页面跳转,继续学习
/ J' T% O U2 o1 D4 z0 A8 q# z, N - wait = WebDriverWait(self.driver, 1000)
. N0 ?9 `4 u& x3 L1 d0 e - learn_button = wait.until(EC.presence_of_element_located((By.XPATH, '//*[@class="nm"]')))* d' @; {$ J% ?- {
- print('准备开始学习')9 n5 V( l' `/ }# M
- continue_learn = re.findall('href="(.*)">(.*)学习', my_course_source)
5 s* P" E" _% C5 `6 B5 l+ b- a - print(continue_learn)' ~( E8 V7 {$ H- S* ?. \/ F
- # 打开课程播放界面. t& c4 }( F$ E( h8 K' u
- self.driver.get("http://g.cjnep.net" + continue_learn[0][0])
- @" {" J0 \- E2 g4 V" M - # continue_learn = re.findall('href="(.*)">继续学习', my_course_source)( X3 ^1 X$ X5 S
- # print(continue_learn)( Y) R9 y j8 _& a8 \
- ! v: ]& ?- I, U* X# [( \
- def play_learn(self):6 d, H& ^! w* z7 h: D' V; L- h% L) m- {$ }
- """播放界面"""
' p, Z6 C# N1 V0 ]5 ~" W H - wait = WebDriverWait(self.driver, 100000000)3 _) ?. I# L6 |3 R/ [2 m! B
- # 播放按钮
5 d1 \- [* V3 P0 o0 n - play_button = wait.until(EC.presence_of_element_located((By.XPATH, '//*[@role="button"]')))
# w. w g8 H5 g& I J - print('开始播放')) c+ Q; [) h# l3 E9 |- Q
- self.driver.find_elements_by_xpath('//*[@role="button"]')[0].click()2 }; f/ y2 o9 @
- # 播放结束,下一章按钮
7 ~+ F1 p! U0 \5 i - for x in range(1, 100000):
6 G: q& D! v: V8 G( l) ? - next_button = wait.until(EC.element_to_be_clickable((By.XPATH, '//*[@id="job_nextvideo_btn"]')))7 u6 W1 ~! \! y) ^
- print('本次已在线学习' + str(x) + '课时,即将进入下一章')7 s8 O5 c0 N" Y8 j- m! I1 U
- self.driver.find_element_by_xpath('//*[@id="job_nextvideo_btn"]').click()
: [! \1 ?. ]8 \6 D6 I: X# Z7 q -
! l& n- P; o! m4 A - def run(self):
* |4 l H; q4 t% `4 p6 H - self.login_jiaoyu()1 e( F% b; |9 T, ^
- # time.sleep(20)
) B8 e, {# B V - courses_page_list = self.my_course()
4 ]* N0 g- s1 n - self.course_list(courses_page_list)+ X- }+ z4 l/ K/ @7 k6 n4 k f
- self.play_learn()) }! j$ s3 p% ?' t) f
-
( k2 t/ k w5 u& f/ i - 1 F8 w$ A- Z6 G; @7 ]8 p; @5 x
- if __name__ == '__main__':
" A" ]% A: ^" q# d. ^$ p - shuake = Shuake()
0 d7 W4 k8 f M# l4 b8 f# }2 H - shuake.run()
复制代码 7 Q/ k2 ?' Z# q+ m& |4 `
( ^9 L& ^/ G8 w' M, T
2 D2 t, g% ~4 K% p* A% e
) O5 n; c% l; D6 r: \# K. d' u) S# E7 f9 z3 `! R, z
|