python网课

本篇文章只作本人记录学习过程使用,不做其他用途!如需要原始代码请私信!

一、完整代码

这里对于selenium库就不详细解释,包括chrome浏览器的配置等问题应该能百度到。这部分代码适合老师自己录制的视频以及音频播放,如果是课程自带的需要另一份代码。不多说直接上代码。

from selenium import webdriver
import time
from requests import *
class Xxt_Spider():
    def __init__(self,course_title,small_title):
        self.course_title=course_title
        self.small_title=small_title
        self.browser=webdriver.Chrome()
    def get_dl(self):
        self.browser.get("http://www.xuexi365.com/cxlogin?refer=http%3A%2F%2Fi.mooc.chaoxing.com")
        self.browser.find_element_by_name("uname").send_keys("自己账号")
        self.browser.find_element_by_name("password").send_keys("自己密码")
        time.sleep(10)
        self.browser.find_element_by_name("button").click()
        self.browser.find_element_by_name("uname").send_keys("自己账号")
        self.browser.find_element_by_name("password").send_keys("自己密码")
        time.sleep(10)
        b.find_element_by_class_name("zl_btn_right").click()
        return self.browser
    def get_course(self):
        b=self.get_dl()
        b.switch_to.frame("frame_content")
        b.get(b.find_element_by_xpath('//*[@title="%s"]'%self.course_title).get_attribute("href"))
        b.find_element_by_xpath("//*[@title='%s']"%self.small_title).click()
        b.execute_script("window.scrollTo(0, document.body.scrollHeight)")
    def start_study(self):
        self.browser.switch_to.frame("iframe")
        self.browser.find_elements_by_tag_name("iframe")
        for i in range(len(self.browser.find_elements_by_tag_name("iframe"))):
            self.browser.switch_to.frame(i)
            time.sleep(3)
            try:
                self.browser.find_element_by_xpath("//*[@type='button']").click()
                time.sleep(2)#等待节点加载出来,不然视频节点还没出来则会报错
                while True:
                    try:
                        self.browser.find_element_by_xpath('//*[@id="audio"]/div[5]/div[1]/span[2]')
                        if self.browser.find_element_by_xpath('//*[@id="audio"]/div[5]/div[1]/span[2]').get_attribute("textContent")==self.browser.find_element_by_xpath('//*[@id="audio"]/div[5]/div[3]/span[2]').get_attribute("textContent"):
                            print("第%d个音视频频已完成"%(i+1))
                            break 
                    except:
                        self.browser.find_element_by_xpath('//*[@id="video"]/div[5]/div[2]/span[2]')
                        if self.browser.find_element_by_xpath('//*[@id="video"]/div[5]/div[2]/span[2]').get_attribute("textContent")==self.browser.find_element_by_xpath('//*[@id="video"]/div[5]/div[4]/span[2]').get_attribute("textContent"):
                            print("第%d个视频已完成"%(i+1))
                            break
                self.browser.switch_to.parent_frame()
            except:
                try:
                    while True:
                        if self.browser.find_element_by_xpath('//*[@id="navigation"]/span[1]').get_attribute("textContent")==self.browser.find_element_by_xpath('//*[@id="navigation"]/span[@class="all"]').get_attribute("textContent"):
                            print("该ppt已完成")
                            break
                        else:
                            time.sleep(1)
                            self.browser.find_element_by_xpath('//*[@id="ext-gen1042"]').click()
                    self.browser.switch_to.parent_frame()
                except:
                    pass
                    self.browser.switch_to.parent_frame()
    def next_page(self):
        self.browser.switch_to.default_content()
        self.browser.find_element_by_xpath('//*[@id="mainid"]/div[1]/div[2]').click()
        
    def main(self):
        self.get_course()
        self.start_study()
        self.next_page()
        time.sleep(5)
if __name__=="__main__":        
	a=Xxt_Spider("","")
	a.main()
	for i in range(1):
	    a.start_study()
	    a.next_page()
    

二、部分代码注释

来第一部分

def __init__(self,course_title,small_title):
        self.course_title=course_title
        self.small_title=small_title
        self.browser=webdriver.Chrome()

这一部分就是初始化属性,包括初始化浏览器,course_title是你要学习的课程名称,small_title是你要学习的章节,就是你要开始学的那一单元的名字。

接下来第二部分

 def get_dl(self):
        self.browser.get("http://www.xuexi365.com/cxlogin?refer=http%3A%2F%2Fi.mooc.chaoxing.com")
        self.browser.find_element_by_name("uname").send_keys("自己账号")
        self.browser.find_element_by_name("password").send_keys("自己密码")
        time.sleep(10)  #设置10s延时,自己识别验证码并输入
        self.browser.find_element_by_name("button").click()
        self.browser.find_element_by_name("uname").send_keys("自己账号")
        self.browser.find_element_by_name("password").send_keys("自己密码")
        time.sleep(10)  #设置10s延时,自己识别验证码并输入
        return self.browser

这里就是登陆环节,由于技术有限,不能实现自动登录,主要是验证码识别问题,使用tesserocr库的识别率太低了,而且对这个库也不是很熟,所以只能设置延时,自己输入验证码了。当然也可以借助打码平台。至于要输入账号密码,第一次是登陆学习通,第二次又要选学校所以需要两次登陆,你可以自己输网址试试是不是要两次。

第三部分

def get_course(self):
        b=self.get_dl()
        b.find_element_by_class_name("zl_btn_right").click()
        b.switch_to.frame("frame_content")
        b.get(b.find_element_by_xpath('//*[@title="%s"]'%self.course_title).get_attribute("href"))
        b.find_element_by_xpath("//*[@title='%s']"%self.small_title).click()
        b.execute_script("window.scrollTo(0, document.body.scrollHeight)")

这一部分就是点开你的课程,然后进入学习的页面,选取章节。这里如果要详细讲每一步的话,篇幅太长。就暂时先不详细讲了。这一部分倒没什么注意的。

第四部分

def start_study(self):
        self.browser.switch_to.frame("iframe")
        self.browser.find_elements_by_tag_name("iframe")
        for i in range(len(self.browser.find_elements_by_tag_name("iframe"))):
            self.browser.switch_to.frame(i)
            time.sleep(3)
            try:
                self.browser.find_element_by_xpath("//*[@type='button']").click()
                time.sleep(2)#等待节点加载出来,不然视频节点还没出来则会报错
                while True:
                    try:
                        self.browser.find_element_by_xpath('//*[@id="audio"]/div[5]/div[1]/span[2]')
                        if self.browser.find_element_by_xpath('//*[@id="audio"]/div[5]/div[1]/span[2]').get_attribute("textContent")==self.browser.find_element_by_xpath('//*[@id="audio"]/div[5]/div[3]/span[2]').get_attribute("textContent"):
                            print("第%d个音视频频已完成"%(i+1))
                            break 
                    except:
                        self.browser.find_element_by_xpath('//*[@id="video"]/div[5]/div[2]/span[2]')
                        if self.browser.find_element_by_xpath('//*[@id="video"]/div[5]/div[2]/span[2]').get_attribute("textContent")==self.browser.find_element_by_xpath('//*[@id="video"]/div[5]/div[4]/span[2]').get_attribute("textContent"):
                            print("第%d个视频已完成"%(i+1))
                            break
                self.browser.switch_to.parent_frame()
            except:
                try:
                    while True:
                        if self.browser.find_element_by_xpath('//*[@id="navigation"]/span[1]').get_attribute("textContent")==self.browser.find_element_by_xpath('//*[@id="navigation"]/span[@class="all"]').get_attribute("textContent"):
                            print("该ppt已完成")
                            break
                        else:
                            time.sleep(1)
                            self.browser.find_element_by_xpath('//*[@id="ext-gen1042"]').click()
                    self.browser.switch_to.parent_frame()
                except:
                    pass
                    self.browser.switch_to.parent_frame()

就是开始学习了,这里有几个延时设置很关键,很有必要,因为速度太快的话网页节点还没加载出来就会报错,所以延时不能省,但可以根据网速调整。当然也可以用selenium的显式等待,这里就直接用sleep代替了。然后因为偷懒了,没有定义变量,所以 几个if判断语句显得非常的长,可以改进一下。

if __name__=="__main__":        
	a=xxt_spider("","")
	a.main()
	for i in range(1):
	    a.start_study()
	    a.next_page()

最后一部分循环可以尽情的设置,可以设置成1000,想怎么来都行,只要能看完就行。对了,next_page方法可能在有的课程上会报错,因为设定的是点击下一页就跳到下一单元,有的课程设置了单元测验什么的,不过大部分应该都没问题。能看音频,视频,自动点击ppt。

  • 2
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值