你想要的都没有
搜索
 发帖

函授网上视频自动学习python脚本

[复制链接]
牛牛先森 发表于 2020-3-26 15:53:34 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
 

注册获取更多资料

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

x

* A+ I& o. M8 a  uPython 是个好东西。
2 l3 v# J0 i. p& H# v6 H1 F* d! [' [& W2 J# Z
  1. from selenium import webdriverimport time# e- ?; M: x# G8 u( J( S# V
  2. #import pandas as pd: L, ]: b7 V2 m, V
  3. from selenium.webdriver.common.by import By
    . H2 E! \* b' G; _
  4. from selenium.webdriver.support.wait import WebDriverWait' _9 P" _6 o" R" `5 n
  5. from selenium.webdriver.common.action_chains import ActionChains
    . h; c( F7 v: W" g& w; [$ i+ I' u
  6. from selenium.webdriver.support import expected_conditions as EC
      t4 e$ y; U& T1 @! E7 N1 T, k
  7. #import writer_file: M1 a1 E3 S' [2 U
  8. import re+ U$ g9 V5 A: E2 i

  9. ' m3 v, J" l& T% c2 z$ {

  10. 5 @7 i2 O+ }+ Z# f9 h- G
  11. class Shuake():
    # ?0 d  O5 r: C
  12.     """docstring for ClassName"""
    * o/ r, k& }- F% g8 e
  13. ( i4 b7 f2 j0 ?: x8 r
  14.     def __init__(self):
    ' G' N+ U3 Z% N# n; J
  15.         #super(ClassName, self).__init__()& a! [+ x2 K% v! {' C& m
  16.         # 谷歌浏览器6 K( o9 g9 w1 k. p
  17.         self.username = '账号'
    - y4 v" R3 s4 k/ y
  18.         self.userpassword = '密码'
    , F! c6 I, ?$ @. M0 ]1 b6 v/ P
  19.         driver_path = r'F:\project\chromedriver.exe'
    & J4 b9 k- M* w9 P
  20.         self.driver = webdriver.Chrome(executable_path=driver_path)
    * b2 Q" J  s& D% T- \9 S
  21. ! k# @+ e# K" W+ e
  22.     def login_jiaoyu(self):
    0 ~' [3 x+ m+ j3 d8 u; Y3 P
  23.         # 账号密码; [  z! v$ {+ K7 j$ f* A
  24.         self.driver.get("http://g.cjnep.net/lms/web/default/login")$ ^2 E" `; _, Y2 ^& g7 O
  25.         # 用户名,密码& c9 h4 n" n. [6 J2 s
  26.         username_input = self.driver.find_element_by_xpath('//*[@id="username"]')9 P9 D6 J5 D) ]2 l5 M: t3 C9 d
  27.         username_input.click()
    $ n! G$ S. I' c4 C, l
  28.         time.sleep(0.5)
    , F  }* e0 L1 C6 k: Q2 Q3 E
  29.         username_input.send_keys(self.username)  w5 c1 M/ I* W
  30.         time.sleep(0.5)
    ) ?* {( z0 v# l7 Q3 s
  31.         userpassword_input = self.driver.find_element_by_xpath('//*[@id="password"]')
    * m+ c$ m9 ~: t
  32.         userpassword_input.send_keys(self.userpassword)  Y6 S5 m. n/ j
  33.         print('请输入验证码,然后点击登录')% o2 Z, H6 ?9 i7 _
  34.         # 等待检测是否登录成功
    ' f8 ~9 U+ d, O) T& B# x
  35.         wait = WebDriverWait(self.driver, 100). [$ ^' _3 g' @7 m6 I& U" C$ x/ o
  36.         shouye_button = wait.until(EC.element_to_be_clickable((By.CLASS_NAME, 'active')))+ P7 \: p, N  w9 a9 x: j
  37.         print("登录成功")' G, `- \* \6 I( G6 j

  38. & G7 U% u& N) ^% v7 K1 ~& b9 s
  39.     def my_course(self):
    0 D0 {6 w7 C- o: C
  40.         """打开我的课程界面"""
    2 p& ]$ I7 S# e, g5 N- {% N: h' D

  41. ' e! x& ?9 @# o' e6 r/ V( |5 K1 X" F
  42.         print("打开课程界面")
    1 a$ W$ Q/ x/ G# ^0 [0 q
  43.         self.driver.get("http://g.cjnep.net/lms/web/course/index")$ p/ q( g: ~$ E5 r* z
  44.         # 获取网页源码; k+ z# c# P& W
  45.         my_course_source = self.driver.page_source
    - l% f) H4 U- b' n" }
  46.         #writer_file.write_file('kk.txt', my_course_source)& \& u3 d! [' g7 W( i2 f
  47.         # 获取课程列表5 W. f, ^/ [* t+ ~8 A0 V
  48.         my_course_source = my_course_source[my_course_source.find('默认;'):]- T9 K; ?, Q" B
  49.         # 课程名称
    ; H% j- j# G/ \9 M; n
  50.         course_name = re.findall('class="namediv"><span.*">(.*)</span>(.*)</div>', my_course_source)2 [( ^7 S5 H0 i. d2 S2 g
  51.         # print(course_name)& }0 g6 C( k* T9 s
  52.         # 课程链接0 Q, n$ |  ^  V4 e- S3 K
  53.         course_url = re.findall('href="/(.*)">进入学习</a></div>', my_course_source)' x4 x! q) B$ M, R2 O/ d0 g
  54.         # print(course_url)
    ' e1 X" y0 d) t8 ~
  55.         # 学习进度
    . u- `6 {/ h) D2 x3 b
  56.         course_complete = re.findall(/ D5 [2 k4 r. @% c% ]- L
  57.             '<div class="otherdiv">(.*)<span>(.*)<font>(.*)</font></span> </div>', my_course_source)
    5 x- }4 P# I0 \
  58.         # print(course_complete), @) c  w% ]+ y1 f7 h. U0 Y
  59.         # 学期 课程名称 主讲老师  完成率  课程链接( J, K3 q& Q2 n
  60.         courses_page_list = []
    9 Q4 L6 i( C  D; c" X! S" \- c
  61.         for x in range(0, len(course_name)):
    : G* s: _) A8 |; l' v
  62.             term = course_name[x][0]/ E6 r& f: V4 G- B; v
  63.             name = course_name[x][1]. y; A3 R  c, a+ o) f
  64.             url = course_url[x]
    3 A$ \- i$ {+ F6 m
  65.             teacher = course_complete[x][0]
    9 h8 x; p% y. d, ]# }: J+ _
  66.             speed = course_complete[x][2]! B0 _% d" h: G4 m( [' o0 m
  67.             print(str(x + 1) + "===" + term + "===" + name + "===" + teacher +! S; X: [+ M% v3 v. [5 i$ Y* u  u; w! G
  68.                   "===学习完成:" + speed + "===http://g.cjnep.net/" + url)
    ; ]9 \. F8 a3 a) u/ _
  69.             courses_page_list.append([term, name, "http://g.cjnep.net/" + url, teacher, speed])1 t4 ?" J( }) p, d  O3 s

  70. . v- V% A7 x  m. i9 ~
  71.         return courses_page_list  I4 k6 r  C. j
  72. 1 L( |/ ?/ G# m  `6 x! w
  73.     def num_input(self, max_num):+ ?% z* W& ?* [" |; B: r$ L
  74.         """用户输入"""
    2 o: e5 ?0 @! z( f0 X, r: S
  75.         max_num_1 = max_num* U6 n% @8 X# T
  76.         while True:
    % M* u9 C2 C) I) y
  77.             try:
    ' D$ ]/ P% K* o& u
  78.                 num = int(input("输入数字序号1~{}之间选择开始学习的视频:".format(max_num_1)))
      S  @8 M  s3 `# Y; ?# q
  79.                 if num > max_num_1 or num < 1:) T; O1 ?3 j) ~2 T, Z! j
  80.                     num = int("x")  e( }: A1 m3 n* s, S) g
  81.                 break
    ! w7 B" @; X' ~8 b8 ~9 j6 U2 D2 @. a
  82.             except Exception as e:
    ' \/ V+ \' u( t* d, F/ Q& Y; v- U4 U
  83.                 print("输入错误,请再输入一遍")
    ) I6 q5 }3 E1 L! Q
  84.         return num" e  k  `' u  o. i6 D

  85. 7 d1 R" j0 v5 J7 Q
  86.     def course_list(self, courses_page_list):
    0 d+ F0 E- C6 e; g. |
  87.         """获取单科课程播放列表"""
    / {% b6 |' M/ T/ P: l+ s
  88.         num = self.num_input(len(courses_page_list))
    ' E( Y( ~& x1 v
  89.         print(courses_page_list[num - 1][2])0 V2 k7 e( k" k, G% m
  90.         self.driver.get(courses_page_list[num - 1][2])
    . D0 Y8 Z  _8 O: M" p3 b; ?! H
  91.         # 打开单科课程列表5 n+ C; w1 N6 r/ U
  92.         my_course_source = self.driver.page_source
    % k4 r) ~. a9 T+ A5 L. y
  93.         #writer_file.write_file('55.txt', my_course_source)
    / |8 _! I: o5 M4 l
  94.         # 等待页面跳转,继续学习
    / J' T% O  U2 o1 D4 z0 A8 q# z, N
  95.         wait = WebDriverWait(self.driver, 1000)
    . N0 ?9 `4 u& x3 L1 d0 e
  96.         learn_button = wait.until(EC.presence_of_element_located((By.XPATH, '//*[@class="nm"]')))* d' @; {$ J% ?- {
  97.         print('准备开始学习')9 n5 V( l' `/ }# M
  98.         continue_learn = re.findall('href="(.*)">(.*)学习', my_course_source)
    5 s* P" E" _% C5 `6 B5 l+ b- a
  99.         print(continue_learn)' ~( E8 V7 {$ H- S* ?. \/ F
  100.         # 打开课程播放界面. t& c4 }( F$ E( h8 K' u
  101.         self.driver.get("http://g.cjnep.net" + continue_learn[0][0])
    - @" {" J0 \- E2 g4 V" M
  102.         # continue_learn = re.findall('href="(.*)">继续学习', my_course_source)( X3 ^1 X$ X5 S
  103.         # print(continue_learn)( Y) R9 y  j8 _& a8 \
  104. ! v: ]& ?- I, U* X# [( \
  105.     def play_learn(self):6 d, H& ^! w* z7 h: D' V; L- h% L) m- {$ }
  106.         """播放界面"""
    ' p, Z6 C# N1 V0 ]5 ~" W  H
  107.         wait = WebDriverWait(self.driver, 100000000)3 _) ?. I# L6 |3 R/ [2 m! B
  108.         # 播放按钮
    5 d1 \- [* V3 P0 o0 n
  109.         play_button = wait.until(EC.presence_of_element_located((By.XPATH, '//*[@role="button"]')))
    # w. w  g8 H5 g& I  J
  110.         print('开始播放')) c+ Q; [) h# l3 E9 |- Q
  111.         self.driver.find_elements_by_xpath('//*[@role="button"]')[0].click()2 }; f/ y2 o9 @
  112.         # 播放结束,下一章按钮
    7 ~+ F1 p! U0 \5 i
  113.         for x in range(1, 100000):
    6 G: q& D! v: V8 G( l) ?
  114.             next_button = wait.until(EC.element_to_be_clickable((By.XPATH, '//*[@id="job_nextvideo_btn"]')))7 u6 W1 ~! \! y) ^
  115.             print('本次已在线学习' + str(x) + '课时,即将进入下一章')7 s8 O5 c0 N" Y8 j- m! I1 U
  116.             self.driver.find_element_by_xpath('//*[@id="job_nextvideo_btn"]').click()
    : [! \1 ?. ]8 \6 D6 I: X# Z7 q

  117. ! l& n- P; o! m4 A
  118.     def run(self):
    * |4 l  H; q4 t% `4 p6 H
  119.         self.login_jiaoyu()1 e( F% b; |9 T, ^
  120.         # time.sleep(20)
    ) B8 e, {# B  V
  121.         courses_page_list = self.my_course()
    4 ]* N0 g- s1 n
  122.         self.course_list(courses_page_list)+ X- }+ z4 l/ K/ @7 k6 n4 k  f
  123.         self.play_learn()) }! j$ s3 p% ?' t) f

  124. ( k2 t/ k  w5 u& f/ i
  125. 1 F8 w$ A- Z6 G; @7 ]8 p; @5 x
  126. if __name__ == '__main__':
    " A" ]% A: ^" q# d. ^$ p
  127.     shuake = Shuake()
    0 d7 W4 k8 f  M# l4 b8 f# }2 H
  128.     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
明天,将会更好。
 

精彩评论1

正序浏览
高级模式
B Color Image Link Quote Code Smilies

本版积分规则

  • 最佳新人

    注册账号后积极发帖的会员
  • 活跃会员

    经常参与各类话题的讨论,发帖内容较有主见
  • 热心会员

    经常帮助其他会员答疑
  • 宣传达人

    积极宣传本站,为本站带来更多的用户访问量
  • 突出贡献

    长期对论坛的繁荣而不断努力,或多次提出建设性意见
  • 优秀版主

    活跃且尽责职守的版主
  • 荣誉管理

    曾经为论坛做出突出贡献目前已离职的版主
  • 论坛元老

    为论坛做出突出贡献的会员
  • VIP

    本站VIP用书专享
  • 资料达人

    资料达人专享勋章

1关注

277粉丝

4137帖子

排行榜
作者专栏
Copyright   ©2018-2020  牛资料plusPowered by©牛资料技术支持:迪恩网络