学习通ppt下载

仅供学习!!拒绝侵权传播ppt!!

侵权立删!!

复习周没有发ppt,却想让打印下来,只能把学习通的ppt下载下来

写了有两个程序,一个基于selenium的全自动(推荐),一个基于自己找txt的半自动

一、全自动ppt下载(推荐)

准备:

1. 安装selenium库,不建议使用最新版本,会闪退,可以使用4.5.0版本:pip install selenium==4.5.0

2. 下载selenium使用的浏览器驱动chromedriver.exe
可以自行下载自己谷歌浏览器对应版本的chromedriver.exe,也可以用我的:

https://pan.quark.cn/s/a3dacb210695

3. 修改代码里面的四个内容

 其中初始url是所选课程播放页面的url

# *******************************修改项***************************************

# chromedriver.exe驱动路径
driver_path='C:\\Program Files\\Google\\Chrome\\Application\\chromedriver.exe'

# 初始url(即点开需要播放课程的任意一个任务页面的url,类似下面这个url)
url="https://mooc1.chaoxing.com/mycourse/studentstudy?chapterId=xxxxxx&courseId=xxxxxx&clazzid=xxxxxx&cpi=xxxxxx&enc=xxxxxx&mooc2=1&openc=xxxxxx"


username='xxx'  #学习通账号
password='xxx'  #学习通密码


#生成ppt的文件夹路径
#路径单独写出来需要四个"\",因为会经历两次转义
path_base="E:\\\\111"

# *******************************修改项***************************************

完整代码如下:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options
from lxml import etree
import time
import os
import requests
import pptx
from pptx.util import Inches



# *******************************注意以及使用***************************************

# 该程序实现自动登陆学习通并完成ppt下载

# 1.安装selenium库,不建议使用最新版本,会闪退,可以使用4.5.0版本:pip install selenium==4.5.0
# 2.修改下面的修改项

# *******************************注意以及使用***************************************




# *******************************修改项***************************************

# chromedriver.exe驱动路径
driver_path='C:\\Program Files\\Google\\Chrome\\Application\\chromedriver.exe'

# 初始url(即点开需要播放课程的任意一个任务页面的url,类似下面这个url)
url="https://mooc1.chaoxing.com/mycourse/studentstudy?chapterId=xxxxxx&courseId=xxxxxx&clazzid=xxxxxx&cpi=xxxxxx&enc=xxxxxx&mooc2=1&openc=xxxxxx"


username='xxx'  #学习通账号
password='xxx'  #学习通密码


#生成ppt的文件夹路径
#路径单独写出来需要四个"\",因为会经历两次转义
path_base="E:\\\\111"

# *******************************修改项***************************************



headers ={
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36'
}



def get_course(browser):
    text = browser.page_source
    html = etree.HTML(text)
    lists = html.xpath('//div[@class="posCatalog_select"]')
    l=html.xpath('//div[@class="posCatalog_select posCatalog_active"]')[0]
    lists.insert(0,l)
    for list in lists:
        id = list.xpath('@id')[0] # id号
        title = list.xpath('.//span[1]/@title')[0] # 小节标题
        num = list.xpath('.//em/text()')[0] #小节序号
        browser.refresh()
        time.sleep(2)
        b = browser.find_element(By.ID, id)
        browser.execute_script("arguments[0].scrollIntoView();", b)
        b.click()
        time.sleep(1)
        name=num.replace(".","-")+"-"+title
        print("当前章节:"+name)
        xiazai(browser,name)


def xiazai(browser,name):
    for i in range(10):
        a=0
        try:
            time.sleep(2)
            browser.switch_to.default_content()
            browser.switch_to.frame(0)
            browser.switch_to.frame(i)
            try:
                browser.switch_to.frame(0)
                a=a+1
                if a>1:
                    name=name+"+1"
                text = browser.page_source
                html = etree.HTML(text)
                list = html.xpath('//img/@src')
                type='PPT'

            except:
                type="视频"

            if type=='PPT':
                print("ppt   " + name + '   图片开始下载')
                path_tp = path_base + "\\\\" + name + '\\\\'  # 图片下载文件夹
                result=path_base + "\\\\" + 'result\\\\'
                ppt_filename = path_base + "\\\\" + 'result\\\\' + name + '.pptx'  # 下载的ppt文件,在result文件夹中

                # 创建图片下载目录

                if not os.path.exists(path_tp):
                    os.mkdir(path_tp)
                if not os.path.exists(result):
                    os.mkdir(result)

                # 下载图片
                for i in range(len(list)):
                    url = list[i]
                    filename = path_tp + str(i + 1) + '.jpg'
                    r = requests.get(url, headers=headers)
                    f = open(filename, 'wb')
                    f.write(r.content)
                    f.close()
                    print(name + ":第" + str(i + 1) + "/" + str(len(list)) + "张图片已完成")
                print("全部完成")
                print("一共有" + str(len(list)) + "张")

                # 将图片排序
                def get_file_list(file_path):
                    dir_list = os.listdir(file_path)
                    if not dir_list:
                        return
                    else:
                        # 注意,这里使用lambda表达式,将文件按照最后修改时间顺序升序排列
                        # os.path.getmtime() 函数是获取文件最后修改时间
                        # os.path.getctime() 函数是获取文件最后创建时间
                        dir_list = sorted(dir_list, key=lambda x: os.path.getmtime(os.path.join(file_path, x)))
                        # print(dir_list)
                        return dir_list

                # 合成ppt
                list = get_file_list(path_tp)
                ppt_file = pptx.Presentation()

                # 按图片编号顺序导入
                for fn in sorted(list, key=lambda item: int(item[:item.rindex('.')])):
                    fn = path_tp + fn
                    slide = ppt_file.slides.add_slide(ppt_file.slide_layouts[1])

                    # 为PPTX文件当前幻灯片中第一个文本框设置文字,本文代码中可忽略
                    slide.shapes.placeholders[0].text = ' '

                    # 导入并为当前幻灯片添加图片,起始位置和尺寸可修改
                    slide.shapes.add_picture(fn, Inches(0), Inches(0), Inches(10), Inches(7.5))

                ppt_file.save(ppt_filename)
                print("ppt   " + name + '   下载已完成')

        except:
            print("本小节ppt下载完成,可前往  "+path_base+"\\\\result   查看")
            print('-------------------------------------------------------------')
            return


def main():
    if not os.path.exists(path_base):
        os.mkdir(path_base)
    chrome_options = Options()
    chrome_options.add_argument('--mute-audio')  #设置静音
    browser = webdriver.Chrome(driver_path,options=chrome_options)
    browser.get(url)

    user_input = browser.find_element(by=By.XPATH, value='//input[@type="text"]')
    pw_input = browser.find_element(by=By.XPATH, value='//input[@type="password"]')
    login_btn = browser.find_element(by=By.XPATH, value='//button')

    time.sleep(1)
    user_input.send_keys(username)
    pw_input.send_keys(password)
    time.sleep(1)
    login_btn.click()
    time.sleep(1)
    print("登陆成功")

    get_course(browser)
    # bofang(browser)

    browser.close()
    print("下载全部完成")

main()

二、半自动ppt下载

在学习通中查看ppt的元素可以发现,网站中都是一个个图片拼接而成

22d725d124df4a268b621a8430eb96d6.png

步骤:

(1)摁F12(或者右键,检查)

定位到ppt的元素

(案例是网上随便找的一个课件)

e3681cdda49e4270838d262b5316ccb2.png

(2)选择包含所有图片的标签

0da00dd31fff4545b5cb93fddb34e4aa.png

(3)进入一个空文件夹,创建一个txt文件,可以命名为想下载的课件名称(任意),将刚才复制的元素粘贴进去,一般为下面两种情况

0ba1dea72fd3471fb94316e981bb3c69.png

——————————————————

a63fc9601cf44a3cb425da7d22010499.png

(4)同理,可以创建多个txt文件,每个文件放入一个想下载的ppt的元素

d203e0d59a7540c4a659160ce0b1bfd8.png

(5)记好这个文件夹的路径,修改下面代码中的路径即可

517ff149e4284ec7bfefa186e256c843.png

代码如下(记得下载相关python包):




# 使用说明:

# (1)摁F12(或者右键,检查),定位到ppt的元素
# (2)选择包含所有图片的标签
# (3)进入一个空文件夹,创建一个txt文件,可以命名为想下载的课件名称(任意),将刚才复制的元素粘贴进去
# (4)同理,可以创建多个txt文件,每个文件放入一个想下载的ppt的元素
# (5)记好这个文件夹的路径,修改下面代码中的路径即可


# 根据上面步骤先将文件夹中的文件弄好,这个代码里面,主要就修改path_base一个,即保存的文件夹目录
# 注意:
# 路径单独写出来需要四个"\",因为会经历两次转义
# 最后生成的ppt结果在result文件夹中


from lxml import etree
import os
import requests
import pptx
from pptx.util import Inches


headers ={
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36'
}


#主目录环境
#路径单独写出来需要四个"\",因为会经历两次转义
#(******************************修改项***************************************)
path_base='E:\\\\11\\\\'
#(******************************修改项***************************************)




l1='<!DOCTYPE html>\n'
l2='<html lang="en">\n'
l3='<head>\n'
l4='    <meta charset="UTF-8" \>\n'
l5='    <meta name="viewport" content="width=device-width, initial-scale=1.0" \>\n'
l6='    <title>Document</title>\n'
l7='</head>\n'
l8='<body>\n'
l9='\n'
l10='</body>\n'
l11='</html>\n'

#提取txt文件名
file_name = os.listdir(path_base)
a=0
filename={}
for i in range(len(file_name)):
    ext = file_name[i][-3:].lower()
    if ext=='txt':
        filename[a]=file_name[i].split('.')[0]
        a=a+1

file = list(filename.values())
#创建ppt下载目录
if not os.path.exists(path_base+'result\\\\'):
    os.mkdir(path_base+'result\\\\')

print('一共检测到'+str(len(file))+'个任务,分别是:')
print(file)
#将每个文件分别提取下载
for name in file:
    print('-------------------------------------------------------------')

    #创建html文件
    #txt变换格式并转换为html,用于etree.HTMLParser的识别
    txt_name=path_base+name+".txt"
    path_html= path_base +name+'.html'
    file = open(txt_name, 'r',errors = 'ignore')  #忽略中文乱码报警
    content = file.read()
    file.close()
    content = content.replace("<br>", "<br />")
    content = content.replace('png">', 'png" />')
    content = content.replace('jpg">', 'jpg" />')
    file_html = open(path_html, 'a')
    file_html.writelines([l1, l2, l3, l4, l5, l6, l7, l8])
    file_html.write(content)
    file_html.writelines([l9, l10, l11])
    file_html.close()


    print("ppt   " + name + '   图片开始下载')
    path_tp = path_base + name + '\\\\'      #图片下载文件夹
    ppt_filename = path_base+'result\\\\' + name + '.pptx'   #下载的ppt文件,在result文件夹中


    #提取图片下载地址
    par = etree.HTMLParser(encoding="utf-8")
    html = etree.parse(path_html,parser=par)
    result = etree.tostring(html, pretty_print=True)
    list = html.xpath('//img/@src')

    #创建图片下载目录
    if not os.path.exists(path_tp):
        os.mkdir(path_tp)

    #下载图片
    for i in range(len(list)):
        url=list[i]
        filename = path_tp + str(i+1) + '.jpg'
        r = requests.get(url, headers=headers)
        f = open(filename, 'wb')
        f.write(r.content)
        f.close()
        print(name+":第"+str(i+1)+"/"+str(len(list))+"张图片已完成")
    print("全部完成")
    print("一共有"+str(len(list))+"张")

    #将图片排序
    def get_file_list(file_path):
        dir_list = os.listdir(file_path)
        if not dir_list:
            return
        else:
            # 注意,这里使用lambda表达式,将文件按照最后修改时间顺序升序排列
            # os.path.getmtime() 函数是获取文件最后修改时间
            # os.path.getctime() 函数是获取文件最后创建时间
            dir_list = sorted(dir_list,key=lambda x: os.path.getmtime(os.path.join(file_path, x)))
            # print(dir_list)
            return dir_list

    #合成ppt
    list= get_file_list(path_tp)
    ppt_file = pptx.Presentation()

    # 按图片编号顺序导入
    for fn in sorted(list, key=lambda item: int(item[:item.rindex('.')])):
        fn=path_tp+fn
        slide = ppt_file.slides.add_slide(ppt_file.slide_layouts[1])

        # 为PPTX文件当前幻灯片中第一个文本框设置文字,本文代码中可忽略
        slide.shapes.placeholders[0].text = fn[:fn.rindex('.')]

        # 导入并为当前幻灯片添加图片,起始位置和尺寸可修改
        slide.shapes.add_picture(fn, Inches(0), Inches(0), Inches(10), Inches(7.5))

    ppt_file.save(ppt_filename)
    print("ppt   "+name+'   下载已完成')
    os.remove(path_html)
    print('-------------------------------------------------------------')
print("下载全部完成")

运行结果展示:

d2c0ed499f8041749994d6d02fe06a3c.png

8a78ab28d0904a0dac925ebf202a1e06.png

66f119dbbe244b6bb25b40a0155ff207.png

81c5003dab56405d80892fca117570f1.png

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zjeweler

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值