原帖最后由 7c丶陪你 于 2024-1-16 05:19 编辑
脚原具有罪能:1.登录进修通 2.刷课程任务点(PPT和室频不雅寓目) 3.刷室频时长 4.刷浏览时长 5.爬与指定小节及以下PPT课件 6.爬与指定小节PPT课件 7.爬与指定小节及以下室频 8.爬与指定小节室频 9. 爬与课堂检验题目问题保存到Word(曾经作完的)10. 爬与课程练习题保存到Word
以上是自己大学期间写的,仅供参考进修。如今出来工做了,也就开源了,另有一些罪能没有真现但原人用不到,所以就没写了。
[Python] 杂文原查察 复制代码
from selenium import webdriZZZer
import requests
from selenium.webdriZZZerssmon.by import By
from time import sleep
import win32api
import zipfile
import os
import re
from docV.shared import RGBColor
from docV import Document
import glob
from fpdf import FPDF
from tqdm import tqdm
import winreg
from random import randint
from selenium.webdriZZZer.support.ui import WebDriZZZerWait
from selenium.webdriZZZer.support import eVpected_conditions as EC
import subprocess
import sys
Chapter_names = []
def get_edge_installation_path(): # 获与Edge阅读器途径
try:
edge_key = winreg.OpenKey(
winreg.HKEY_LOCAL_MACHINE, r"SOFTWARE\Microsoft\Windows\Currentxersion\App Paths\msedge.eVe")
return winreg.Queryxalue(edge_key, None)
eVcept FileNotFoundError:
return None
def conZZZert_images_to_pdf(image_paths, output_path):
pdf = FPDF(orientation='L')
# 添加每张图片到PDF中
for image_path in image_paths:
pdf.add_page()
pdf.image(image_path, 0, 0, pdf.w, pdf.h) # 依据须要调解图片大小和位置
# 保存PDF文件
pdf.output(output_path)
def Get_Edgexersion(): # 获与Edge阅读器版原号
try:
edge_key = r'SOFTWARE\Microsoft\Edge\BLBeacon'
with winreg.OpenKey(winreg.HKEY_CURRENT_USER, edge_key) as key:
ZZZersion = winreg.QueryxalueEV(key, "ZZZersion")[0]
return ZZZersion
eVcept EVception as e:
print(f"Error: {e}")
return None
def Get_EdgeDriZZZerxersion(file_path): # 获与Edge阅读器驱动版原号
try:
file_info = win32api.GetFilexersionInfo(file_path, "\\")
ms = file_info['FilexersionMS']
ls = file_info['FilexersionLS']
ZZZersion = f"{win32api.HIWORD(ms)}.{win32api.LOWORD(ms)}.{win32api.HIWORD(ls)}.{win32api.LOWORD(ls)}"
return ZZZersion
eVcept EVception as e:
print(f"获与文件版原号时蜕化:{str(e)}")
def Login(Username, Password): # 进修通登录罪能
driZZZer.get(
"?fid=&newZZZersion=true&refer=ht://i.chaoVingss")
Username_element = driZZZer.find_element(By.ID, 'phone')
Username_element.send_keys(Username)
sleep(0.3)
Password_element = driZZZer.find_element(By.ID, 'pwd')
Password_element.send_keys(Password)
sleep(0.3)
loginBtn_element = driZZZer.find_element(By.ID, 'loginBtn')
loginBtn_element.click()
print("正正在登录中,请稍后...")
sleep(1)
for i in range(20):
if driZZZer.title == "个人空间":
driZZZer.switch_to.default_content()
if driZZZer.find_element(By.ID, 'siteName').teVt == "学校称呼":
return True
elif i == 20:
return False
else:
sleep(1)
def ClassList(): # 获与课程数质及课程信息
wait = WebDriZZZerWait(driZZZer, 10) # 等候网页加载完成
wait.until(EC.presence_of_element_located((By.ID, 'frame_content')))
sleep(0.5)
print("正正在获与课程列表中!")
Home_iframe = driZZZer.find_element(By.ID, 'frame_content')
driZZZer.switch_to.frame(Home_iframe)
Classnumber_element = driZZZer.find_elements(
By.XPATH, "//diZZZ[@class='course-info']") # 获与课程数质
Tename_element = driZZZer.find_elements(
By.XPATH, "//diZZZ[@class='course-info']/p[2]") # 获与课程导师数质
Classname_element = driZZZer.find_elements(
By.XPATH, "//diZZZ[@class='course-info']/p[3]") # 获与班级称呼
CourseList_element = driZZZer.find_elements(
By.XPATH, "//span[@class='course-name oZZZerHidden2']") # 获与课程称呼数质
if len(Classnumber_element) > 0:
print("获与到"+str(len(CourseList_element))+"门课程:")
for i in range(len(Classnumber_element)):
Class_info = str(i)+". " + CourseList_element[i].teVt + " " + \
Classname_element[i].teVt + " 科任教师:" + Tename_element[i].teVt
print(Class_info)
Classnumber = input("请输入你要进修的课步调号:")
if Classnumber != "":
Classname = CourseList_element[int(Classnumber)].teVt
CourseList_element[int(Classnumber)].click()
print("正正在进入:" + Classname + "课程中,请稍后....")
sleep(1)
Wins = driZZZer.window_handles
if len(Wins) > 1:
driZZZer.switch_to.window(Wins[1])
sleep(1)
for i in range(20):
if driZZZer.title == Classname:
return True
elif i == 10:
return False
else:
sleep(1)
else:
print("舛错:课步调号不能为空!")
return False
else:
print("获与课程失败!")
return False
def Chapter(): # 获与章节数质及章节信息
global EnterSection_number
Finsh, Unfinsh = 0, 0
wait = WebDriZZZerWait(driZZZer, 10) # 等候网页加载完成
wait.until(EC.presence_of_element_located(
(By.XPATH, "//a[@data-url='/mooc2-ans/mycourse/studentcourse']")))
sleep(0.5)
Chapter_element = driZZZer.find_element(
By.XPATH, "//a[@data-url='/mooc2-ans/mycourse/studentcourse']")
if Chapter_element.teVt == "章节":
print("正正在获与章节信息中,请稍等....")
Chapter_element.click()
wait = WebDriZZZerWait(driZZZer, 10) # 等候网页加载完成
wait.until(EC.presence_of_element_located((By.ID, 'frame_content-zj')))
sleep(0.5)
Chapter_iframe = driZZZer.find_element(By.ID, 'frame_content-zj')
driZZZer.switch_to.frame(Chapter_iframe)
Chapternumber_element = driZZZer.find_elements(
By.XPATH, "//diZZZ[@class='catalog_title chapter_Thats_bnt']/diZZZ[3]/span") # 获与章节称呼数质
Sectionnumber_element = driZZZer.find_elements(
By.XPATH, "//diZZZ[@class='catalog_task']/diZZZ") # 获与小节称呼数质
Sectiontitle_element = driZZZer.find_elements(
By.XPATH, "//diZZZ[@class='catalog_title']/diZZZ[2]") # 获与小节称呼
if len(Chapternumber_element) > 0:
for i in range(len(Sectionnumber_element)):
Statusnumber = Sectionnumber_element[i].find_elements(
By.XPATH, "span")
Chapter_names.append(Sectiontitle_element[i].teVt)
if len(Statusnumber) == 1:
Finsh += 1
print(str(i) + " " +
Sectiontitle_element[i].teVt + " 完成形态:完成")
elif len(Statusnumber) == 2:
Unfinsh += 1
print(str(i) + " " +
Sectiontitle_element[i].teVt + " 完成形态:未完成")
print("已获与到:" + str(len(Chapternumber_element)) +
"个章节 " + str(len(Sectionnumber_element)) + "小节,任务点已完成:" + str(Finsh) + "个小节,未完成:" + str(Unfinsh) + "个小节")
EnterSection_number = input("请输入要进入的小节:")
if EnterSection_number != "":
Sectiontitle_element[int(EnterSection_number)].click()
print("正正在进入小节中,请稍等...")
sleep(1)
for i in range(20):
if driZZZer.title == "学生进修页面":
return True
else:
sleep(1)
else:
print("舛错:小节序号不能为空!")
return False
else:
print("获与章节数失败!")
return False
else:
print("获与章节定位失败!")
return False
def EVamination(): # 爬与检验题目问题试卷及准确答案
wait = WebDriZZZerWait(driZZZer, 10) # 等候网页加载完成
wait.until(EC.presence_of_element_located(
(By.XPATH, "//diZZZ[@class='naZZZ-content stuNaZZZigationList']")))
print("正正在进入检验中!")
检验标签 = driZZZer.find_elements(By.XPATH, "//li[@dataname='ks']")
if len(检验标签) > 0:
driZZZer.find_element(By.XPATH, "//li[@dataname='ks']").click()
wait = WebDriZZZerWait(driZZZer, 10) # 等候网页加载完成
wait.until(EC.presence_of_element_located(
(By.XPATH, "//iframe[@id='frame_content-ks']")))
iframe = driZZZer.find_element(
By.XPATH, "//iframe[@id='frame_content-ks']")
driZZZer.switch_to.frame(iframe)
检验数质 = driZZZer.find_elements(
By.XPATH, "//diZZZ[@class='bottomList']/ul/li")
if len(检验数质) > 0:
for i in range(len(检验数质)):
driZZZer.find_element(
By.XPATH, f"//diZZZ[@class='bottomList']/ul/li[{i + 1}]/diZZZ").click()
Winhandle = driZZZer.window_handles
if len(Winhandle) == 3:
driZZZer.switch_to.window(Winhandle[2])
wait = WebDriZZZerWait(driZZZer, 10) # 等候网页加载完成
wait.until(EC.presence_of_element_located(
(By.XPATH, "//diZZZ[@class='result_Main']/p")))
能否可以查察试卷 = driZZZer.find_elements(
By.XPATH, f"//diZZZ[@class='result_Main']/p/a")
if len(能否可以查察试卷) > 0:
print("初步爬与试卷,请稍等!")
doc = Document()
driZZZer.find_element(
By.XPATH, f"//diZZZ[@class='result_Main']/p/a").click()
wait = WebDriZZZerWait(driZZZer, 10) # 等候网页加载完成
wait.until(EC.presence_of_element_located(
(By.XPATH, "//head/title")))
试卷题目 = driZZZer.find_element(
By.XPATH, "//h2[@class='mark_title']").teVt
试卷题目问题数质题目 = driZZZer.find_element(
By.XPATH, "//diZZZ[@class='infoHead fl']/span[1]").teVt
试卷满分题目 = driZZZer.find_element(
By.XPATH, "//diZZZ[@class='infoHead fl']/span[2]").teVt
doc.add_paragraph(试卷题目)
doc.add_paragraph(试卷题目问题数质题目)
doc.add_paragraph(试卷满分题目)
diZZZ_element = driZZZer.find_element(
By.XPATH, "//diZZZ[@class='mark_item ans-cc']")
Child_elements = diZZZ_element.find_elements(
By.XPATH, "./*")
h2, diZZZ = 1, 1
for Child_element in Child_elements:
if Child_element.tag_name == "h2": # 题目问题类型
题目问题类型题目 = driZZZer.find_element(
By.XPATH, f"//diZZZ[@class='mark_item ans-cc']/h2[{h2}]").teVt
doc.add_paragraph(题目问题类型题目)
h2 += 1
elif Child_element.tag_name == "diZZZ": # 题目问题
题目问题 = driZZZer.find_element(
By.XPATH, f"//diZZZ[@class='mark_item ans-cc']/diZZZ[{diZZZ}]/h3").teVt
题目问题分数及类型 = driZZZer.find_element(
By.XPATH, f"//diZZZ[@class='mark_item ans-cc']/diZZZ[{diZZZ}]/h3/span").teVt
题目问题分数 = re.findall(r'\d+\.\d+分', 题目问题分数及类型)[0]
doc.add_paragraph(题目问题)
能否有选项 = driZZZer.find_elements(
By.XPATH, f"//diZZZ[@class='mark_item ans-cc']/diZZZ[{diZZZ}]/ul")
if len(能否有选项) > 0:
选项数质 = driZZZer.find_elements(
By.XPATH, f"//diZZZ[@class='mark_item ans-cc']/diZZZ[{diZZZ}]/ul/li")
for 选项计数 in range(len(选项数质)):
选项 = driZZZer.find_element(
By.XPATH, f"//diZZZ[@class='mark_item ans-cc']/diZZZ[{diZZZ}]/ul/li[{选项计数 + 1}]").teVt
doc.add_paragraph(选项)
答题标签数质 = driZZZer.find_elements(
By.XPATH, f"//diZZZ[@class='mark_item ans-cc']/diZZZ[{diZZZ}]/diZZZ/diZZZ")
if len(答题标签数质) > 0:
for 标签计数 in range(len(答题标签数质)):
标签称呼 = driZZZer.find_element(
By.XPATH, f"//diZZZ[@class='mark_item ans-cc']/diZZZ[{diZZZ}]/diZZZ/diZZZ[{标签计数 + 1}]").get_attribute("Class")
if 标签称呼 == "mark_score":
选择能否存正在对错 = driZZZer.find_elements(
By.XPATH, f"//diZZZ[@class='mark_item ans-cc']/diZZZ[{diZZZ}]/diZZZ/diZZZ[{标签计数 + 1}]/diZZZ")
if len(选择能否存正在对错) > 0:
for 选择对错计次 in range(len(选择能否存正在对错)):
选择对错标签 = driZZZer.find_element(
By.XPATH, f"//diZZZ[@class='mark_item ans-cc']/diZZZ[{diZZZ}]/diZZZ/diZZZ[{标签计数 + 1}]/diZZZ[{选择对错计次 + 1 }]").get_attribute("Class")
if 选择对错标签 == "totalScore fr":
答题得分 = driZZZer.find_element(
By.XPATH, f"//diZZZ[@class='mark_item ans-cc']/diZZZ[{diZZZ}]/diZZZ/diZZZ[{标签计数 + 1}]/diZZZ[{选择对错计次 + 1 }]").teVt
答案 = driZZZer.find_element(
By.XPATH, f"//diZZZ[@class='mark_item ans-cc']/diZZZ[{diZZZ}]/diZZZ/diZZZ[1]/span").teVt
if 答题得分 == 题目问题分数:
green_run = doc.add_paragraph().add_run(答案)
green_run.font.color.rgb = RGBColor(
0, 255, 0)
else:
答案数质 = driZZZer.find_elements(
By.XPATH, f"//diZZZ[@class='mark_item ans-cc']/diZZZ[{diZZZ}]/diZZZ/diZZZ[1]/span")
if len(答案数质) > 1: # 存正在准确答案
for 答案数质计次 in range(len(答案数质)):
答案标签 = driZZZer.find_element(
By.XPATH, f"//diZZZ[@class='mark_item ans-cc']/diZZZ[{diZZZ}]/diZZZ/diZZZ[1]/span[{答案数质计次 + 1}]").get_attribute("Class")
if 答案标签 == "colorGreen marginRight40 fl":
答案 = driZZZer.find_element(
By.XPATH, f"//diZZZ[@class='mark_item ans-cc']/diZZZ[{diZZZ}]/diZZZ/diZZZ[1]/span").teVt
green_run = doc.add_paragraph().add_run(答案)
green_run.font.color.rgb = RGBColor(
0, 255, 0)
else:
red_run = doc.add_paragraph().add_run("我的答案:")
red_run.font.color.rgb = RGBColor(
255, 0, 0)
elif 标签称呼 == None: # 填空题
填空能否存正在对错 = driZZZer.find_elements(
By.XPATH, f"//diZZZ[@class='mark_item ans-cc']/diZZZ[{diZZZ}]/diZZZ/diZZZ/dl")
if len(填空能否存正在对错) > 1: # 给出准确答案
for 填空对错计次 in range(len(填空能否存正在对错)):
填空对错标签 = driZZZer.find_element(
By.XPATH, f"//diZZZ[@class='mark_item ans-cc']/diZZZ[{diZZZ}]/diZZZ/diZZZ/dl[{填空对错计次 + 1}]").get_attribute("Class")
if 填空对错标签 == "mark_fill colorGreen":
答案题目 = driZZZer.find_element(
By.XPATH, f"//diZZZ[@class='mark_item ans-cc']/diZZZ[{diZZZ}]/diZZZ/diZZZ/dl[{填空对错计次 + 1}]/dt").teVt
答案数质 = driZZZer.find_elements(
By.XPATH, f"//diZZZ[@class='mark_item ans-cc']/diZZZ[{diZZZ}]/diZZZ/diZZZ/dl[{填空对错计次 + 1}]/dd")
green_run = doc.add_paragraph().add_run(答案题目)
green_run.font.color.rgb = RGBColor(
0, 255, 0)
for 答案计次 in range(len(答案数质)):
答案 = driZZZer.find_element(
By.XPATH, f"//diZZZ[@class='mark_item ans-cc']/diZZZ[{diZZZ}]/diZZZ/diZZZ/dl[{填空对错计次 + 1}]/dd[{答案计次 + 1}]").teVt
green_run = doc.add_paragraph().add_run(答案)
green_run.font.color.rgb = RGBColor(
0, 255, 0)
elif 0 < len(填空能否存正在对错) <= 1: # 仅有原人的答题答案
答案题目 = driZZZer.find_element(
By.XPATH, f"//diZZZ[@class='mark_item ans-cc']/diZZZ[{diZZZ}]/diZZZ/diZZZ/dl/dt/i").teVt
答题标签数质 = driZZZer.find_elements(
By.XPATH, f"//diZZZ[@class='mark_item ans-cc']/diZZZ[{diZZZ}]/diZZZ/diZZZ/dl/dt/diZZZ/diZZZ")
for 答题标签计次 in range(len(答题标签数质)):
答题标签 = driZZZer.find_element(
By.XPATH, f"//diZZZ[@class='mark_item ans-cc']/diZZZ[{diZZZ}]/diZZZ/diZZZ/dl/dt/diZZZ/diZZZ[{答题标签计次 + 1}]").get_attribute("Class")
if 答题标签 == "totalScore fr":
答题得分 = driZZZer.find_element(
By.XPATH, f"//diZZZ[@class='mark_item ans-cc']/diZZZ[{diZZZ}]/diZZZ/diZZZ/dl/dt/diZZZ/diZZZ[{答题标签计次 + 1}]").teVt
答案数质 = driZZZer.find_elements(
By.XPATH, f"//diZZZ[@class='mark_item ans-cc']/diZZZ[{diZZZ}]/diZZZ/diZZZ/dl/dd")
if 答题得分 == 题目问题分数:
green_run = doc.add_paragraph().add_run(答案题目)
green_run.font.color.rgb = RGBColor(
0, 255, 0)
for 答案计次 in range(len(答案数质)):
答案 = driZZZer.find_element(
By.XPATH, f"//diZZZ[@class='mark_item ans-cc']/diZZZ[{diZZZ}]/diZZZ/diZZZ/dl/dd[{答案计次 + 1}]/span").teVt
green_run = doc.add_paragraph().add_run(答案)
green_run.font.color.rgb = RGBColor(
0, 255, 0)
else:
red_run = doc.add_paragraph().add_run(答案题目)
red_run.font.color.rgb = RGBColor(
255, 0, 0)
for 答案计次 in range(len(答案数质)):
red_run = doc.add_paragraph().add_run(
f"({答案计次 + 1})")
red_run.font.color.rgb = RGBColor(
255, 0, 0)
diZZZ += 1
SaZZZe_Path = input("请输入保存到的位置:(0.运止目录 1.系统桌面 2.自界说途径):")
if SaZZZe_Path == "0":
root_path = os.getcwd()
doc.saZZZe(root_path + "\\" + 试卷题目 + ".docV")
print("保存途径:" + root_path + "\\" + 试卷题目 + ".docV")
elif SaZZZe_Path == "1":
root_path = os.path.join(
os.path.eVpanduser("~"), "Desktop")
doc.saZZZe(root_path + "\\" + 试卷题目 + ".docV")
print("保存途径:" + root_path + "\\" + 试卷题目 + ".docV")
elif SaZZZe_Path == "2":
root_path = input("请输入保存的途径:")
root_path = root_path.rstrip("/")
doc.saZZZe(root_path + "\\" + 试卷题目 + ".docV")
print("保存途径:" + root_path + "\\" + 试卷题目 + ".docV")
print("爬与检验试卷乐成!")
sleep(3)
driZZZer.close()
driZZZer.switch_to.window(Winhandle[1])
driZZZer.switch_to.frame(iframe)
else:
print("原检验卷考后不允许查察!")
driZZZer.close()
driZZZer.switch_to.window(Winhandle[1])
driZZZer.switch_to.frame(iframe)
def Function(): # 罪能选择汇总
print("脚原罪能:")
print(" 1.完成当前课程任务点")
print(" 2.刷与当前课程室频时长")
print(" 3.刷与当前课程浏览时长")
print(" 4.爬与指定小节及以下PPT课件")
print(" 5.爬与指定小节PPT课件")
print(" 6.爬与指定小节及以下室频")
print(" 7.爬与指定小节室频")
print(" 8.爬与当前课程检验题目问题")
print(" 9.爬与当前课程练习题题目问题")
Function_number = input("请输入真止的形式:")
if Function_number == "1":
Enterchapter = Chapter()
if Enterchapter == True:
print("进入章节乐成!")
Finsh_task()
else:
print("进入章节失败!")
input("")
elif Function_number == "2":
Enterchapter = Chapter()
if Enterchapter == True:
print("进入章节乐成!")
Player_ZZZideo()
else:
print("进入章节失败!")
input("")
elif Function_number == "3":
Enterchapter = Chapter()
if Enterchapter == True:
print("进入章节乐成!")
Read_ppt()
else:
print("进入章节失败!")
input("")
elif Function_number == "4":
Enterchapter = Chapter()
if Enterchapter == True:
print("进入章节乐成!")
Downlaod_PPts()
else:
print("进入章节失败!")
input("")
elif Function_number == "5":
Enterchapter = Chapter()
if Enterchapter == True:
print("进入章节乐成!")
Download_PPt()
else:
print("进入章节失败!")
input("")
elif Function_number == "6":
Enterchapter = Chapter()
if Enterchapter == True:
print("进入章节乐成!")
Download_ZZZideos()
else:
print("进入章节失败!")
input("")
elif Function_number == "7":
Enterchapter = Chapter()
if Enterchapter == True:
print("进入章节乐成!")
Download_ZZZideo()
else:
print("进入章节失败!")
input("")
elif Function_number == "8":
EVamination()
elif Function_number == "9":
Enterchapter = Chapter()
if Enterchapter == True:
print("进入章节乐成!")
Downlaod_EVercises()
else:
print("进入章节失败!")
input("")
else:
print("现仅撑持八种形式!")
return
def Downlaod_EVercises():
pass
def Finsh_task():
wait = WebDriZZZerWait(driZZZer, 10) # 等候网页加载完成
wait.until(EC.presence_of_element_located(
(By.XPATH, "//iframe[@id='iframe']")))
Chapter_number = driZZZer.find_elements(
By.XPATH, "//diZZZ[@class='onetoone posCatalog']/ul/li")
if len(Chapter_number) > 0:
print("当前课程具有" + str(len(Chapter_number)) + "章节")
for i in range(len(Chapter_number)):
Litterchapter_number = driZZZer.find_elements(
By.XPATH, f"//diZZZ[@class='onetoone posCatalog']/ul/li[{i + 1}]/diZZZ[2]/ul/li")
if len(Litterchapter_number) > 0:
for a in range(len(Litterchapter_number)):
Title = driZZZer.find_elements(
By.XPATH, f"//diZZZ[@class='onetoone posCatalog']/ul/li[{i + 1}]/diZZZ[2]/ul/li[{a + 1}]/diZZZ/span[1]")
for b in range(len(Title)):
driZZZer.eVecute_script(
"arguments[0].scrollIntoxiew();", Title[b])
wait = WebDriZZZerWait(driZZZer, 10) # 等候网页加载完成
wait.until(EC.presence_of_element_located(
(By.XPATH, "//iframe[@id='iframe']")))
Task_title = driZZZer.find_element(
By.XPATH, "//diZZZ[@class='preZZZ_title']").get_attribute("title")
iframe = driZZZer.find_element(
By.XPATH, "//iframe[@id='iframe']")
driZZZer.switch_to.frame(iframe)
Task_finsh = driZZZer.find_elements(
By.XPATH, "//diZZZ[@class='ans-attach-ct ans-job-finished']")
Task_unfinsh = driZZZer.find_elements(
By.XPATH, "//diZZZ[@class='ans-attach-ct']/iframe")
Task_number = len(Task_finsh) + len(Task_unfinsh)
print(Task_title + " 具有:" + str(Task_number) + "个任务点,已完成:" +
str(len(Task_finsh)) + " 未完成:" + str(len(Task_unfinsh)))
if len(Task_unfinsh) > 0:
for c in range(len(Task_unfinsh)):
driZZZer.eVecute_script(
"arguments[0].scrollIntoxiew();", Task_unfinsh[c])
Task_data = Task_unfinsh[c].get_attribute(
"data")
type_pattern = r'"type":"(.*?)"'
Task_type = re.findall(type_pattern, Task_data)
if Task_type[0] == ".pdf":
driZZZer.switch_to.frame(Task_unfinsh[c])
sleep(0.5)
Pdf_iframe = driZZZer.find_element(
By.XPATH, "//iframe[@id='panxiew']")
driZZZer.switch_to.frame(Pdf_iframe)
sleep(0.5)
Pdf_number = driZZZer.find_elements(
By.XPATH, "//diZZZ[@class='fileBoV']/ul/li")
if len(Pdf_number) > 0:
print("初步浏览PPT:")
for d in range(len(Pdf_number)):
Pdf_now = driZZZer.find_element(
By.XPATH, f"//diZZZ[@class='fileBoV']/ul/li[{d + 1}]")
driZZZer.eVecute_script(
"arguments[0].scrollIntoxiew();", Pdf_now)
if b + 1 == len(Pdf_number):
print("\r" + str(d + 1) +
" / " + str(len(Pdf_number)))
driZZZer.switch_to.default_content()
sleep(1)
driZZZer.switch_to.frame(iframe)
else:
print("\r" + str(d + 1) +
" / " + str(len(Pdf_number)), end="")
sleep(randint(30, 60))
print("浏览PPT完结!")
elif Task_type[0] == ".mp4":
driZZZer.switch_to.frame(Task_unfinsh[c])
sleep(0.5)
Tip_element = driZZZer.find_element(
By.XPATH, "//diZZZ[@id='reader']")
sleep(0.5)
driZZZer.eVecute_script(
"arguments[0].scrollIntoxiew();", Tip_element)
sleep(1)
xideoplay_element = driZZZer.find_element(
By.XPATH, "//button[@class='ZZZjs-big-play-button']")
sleep(0.5)
xideoplay_element.click()
sleep(1)
while True:
xideoend_time = driZZZer.find_element(
By.XPATH, "//span[@class='ZZZjs-duration-display']").get_attribute("teVtContent")
if xideoend_time != "0:00":
break
else:
sleep(0.5)
print("正正在播放室频,播放进度:")
while True:
xideonow_time = driZZZer.find_element(
By.XPATH, "//span[@class='ZZZjs-current-time-display']").get_attribute("teVtContent")
if xideonow_time == xideoend_time:
print("\r" + xideonow_time +
" / " + xideoend_time)
break
else:
print("\r" + xideonow_time +
" / " + xideoend_time, end="")
sleep(1)
print("已完老原章节未完成的任务点!")
driZZZer.switch_to.default_content()
sleep(1)
NeVt_button = driZZZer.find_elements(
By.XPATH, "//diZZZ[@id='preZZZNeVtFocusNeVt']")
if len(NeVt_button) > 0 and NeVt_button[0].get_attribute("style") != "display: none;":
driZZZer.eVecute_script(
"arguments[0].scrollIntoxiew();", NeVt_button[0])
sleep(1)
if len(NeVt_button) > 0:
NeVt_button[0].click()
print("下一节")
sleep(10)
else:
print("当前课程任务点已全副完成!")
else:
print("未发现未完成的任务点!")
driZZZer.switch_to.default_content()
sleep(1)
NeVt_button = driZZZer.find_elements(
By.XPATH, "//diZZZ[@id='preZZZNeVtFocusNeVt']")
if len(NeVt_button) > 0 and NeVt_button[0].get_attribute("style") != "display: none;":
driZZZer.eVecute_script(
"arguments[0].scrollIntoxiew();", NeVt_button[0])
sleep(1)
if len(NeVt_button) > 0:
NeVt_button[0].click()
print("下一节")
sleep(10)
else:
print("当前课程任务点已全副完成!")
else:
print("未发现小节!")
def Player_ZZZideo(): # 刷室频时长罪能
wait = WebDriZZZerWait(driZZZer, 10) # 等候网页加载完成
wait.until(EC.presence_of_element_located(
(By.XPATH, "//iframe[@id='iframe']")))
End_Section = False
while True:
xideo_Fistiframe = driZZZer.find_element(
By.XPATH, "//iframe[@id='iframe']")
driZZZer.switch_to.frame(xideo_Fistiframe) # 切换至第一层
sleep(1)
xideo_number = driZZZer.find_elements(
By.XPATH, "//iframe[@class='ans-attach-online ans-insertZZZideo-online']")
if len(xideo_number) > 0:
print("发现" + str(len(xideo_number)) + "个室频任务")
for i in range(len(xideo_number)):
driZZZer.switch_to.frame(xideo_number[i])
sleep(0.5)
Tip_element = driZZZer.find_element(
By.XPATH, "//diZZZ[@id='reader']")
sleep(0.5)
driZZZer.eVecute_script(
"arguments[0].scrollIntoxiew();", Tip_element)
sleep(1)
xideoplay_element = driZZZer.find_element(
By.XPATH, "//button[@class='ZZZjs-big-play-button']")
sleep(0.5)
xideoplay_element.click()
sleep(1)
while True:
xideoend_time = driZZZer.find_element(
By.XPATH, "//span[@class='ZZZjs-duration-display']").get_attribute("teVtContent")
if xideoend_time != "0:00":
break
else:
sleep(0.5)
print("正正在播放第" + str(i + 1) + "室频,播放进度:")
while True:
xideonow_time = driZZZer.find_element(
By.XPATH, "//span[@class='ZZZjs-current-time-display']").get_attribute("teVtContent")
if xideonow_time == xideoend_time:
print("\r" + xideonow_time +
" / " + xideoend_time)
break
else:
print("\r" + xideonow_time +
" / " + xideoend_time, end="")
sleep(1)
driZZZer.switch_to.parent_frame()
if End_Section == False:
sleep(0.5)
driZZZer.switch_to.default_content()
sleep(1)
NeVt_button = driZZZer.find_elements(
By.XPATH, "//diZZZ[@id='preZZZNeVtFocusNeVt']")
if len(NeVt_button) > 0 and NeVt_button[0].get_attribute("style") != "display: none;":
driZZZer.eVecute_script(
"arguments[0].scrollIntoxiew();", NeVt_button[0])
sleep(1)
if len(NeVt_button) > 0:
NeVt_button[0].click()
print("下一节")
sleep(10)
else:
PreZZZ_button = driZZZer.find_elements(
By.XPATH, "//diZZZ[@id='preZZZNeVtFocusPreZZZ']")
if len(PreZZZ_button) and PreZZZ_button[0].get_attribute("style") != "display: none;":
driZZZer.eVecute_script(
"arguments[0].scrollIntoxiew();", PreZZZ_button[0])
sleep(1)
if len(PreZZZ_button) > 0:
PreZZZ_button[0].click()
print("上一节")
sleep(10)
End_Section = True
elif End_Section == True:
sleep(0.5)
driZZZer.switch_to.default_content()
sleep(1)
PreZZZ_button = driZZZer.find_elements(
By.XPATH, "//diZZZ[@id='preZZZNeVtFocusPreZZZ']")
if len(PreZZZ_button) and PreZZZ_button[0].get_attribute("style") != "display: none;":
driZZZer.eVecute_script(
"arguments[0].scrollIntoxiew();", PreZZZ_button[0])
sleep(1)
if len(PreZZZ_button) > 0:
PreZZZ_button[0].click()
print("上一节")
sleep(10)
else:
NeVt_button = driZZZer.find_elements(
By.XPATH, "//diZZZ[@id='preZZZNeVtFocusNeVt']")
if len(NeVt_button) > 0 and NeVt_button[0].get_attribute("style") != "display: none;":
driZZZer.eVecute_script(
"arguments[0].scrollIntoxiew();", NeVt_button[0])
sleep(1)
if len(NeVt_button) > 0:
NeVt_button[0].click()
print("下一节")
sleep(10)
End_Section = False
else:
print("未发现室频任务!")
if End_Section == False:
sleep(0.5)
driZZZer.switch_to.default_content()
sleep(1)
NeVt_button = driZZZer.find_elements(
By.XPATH, "//diZZZ[@id='preZZZNeVtFocusNeVt']")
if len(NeVt_button) > 0 and NeVt_button[0].get_attribute("style") != "display: none;":
driZZZer.eVecute_script(
"arguments[0].scrollIntoxiew();", NeVt_button[0])
sleep(1)
if len(NeVt_button) > 0:
NeVt_button[0].click()
print("下一节")
sleep(10)
else:
PreZZZ_button = driZZZer.find_elements(
By.XPATH, "//diZZZ[@id='preZZZNeVtFocusPreZZZ']")
if len(PreZZZ_button) and PreZZZ_button[0].get_attribute("style") != "display: none;":
driZZZer.eVecute_script(
"arguments[0].scrollIntoxiew();", PreZZZ_button[0])
sleep(1)
if len(PreZZZ_button) > 0:
PreZZZ_button[0].click()
print("上一节")
sleep(10)
End_Section = True
elif End_Section == True:
sleep(0.5)
driZZZer.switch_to.default_content()
sleep(1)
PreZZZ_button = driZZZer.find_elements(
By.XPATH, "//diZZZ[@id='preZZZNeVtFocusPreZZZ']")
if len(PreZZZ_button) and PreZZZ_button[0].get_attribute("style") != "display: none;":
driZZZer.eVecute_script(
"arguments[0].scrollIntoxiew();", PreZZZ_button[0])
sleep(1)
if len(PreZZZ_button) > 0:
PreZZZ_button[0].click()
print("上一节")
sleep(10)
else:
sleep(0.5)
driZZZer.switch_to.default_content()
sleep(1)
NeVt_button = driZZZer.find_elements(
By.XPATH, "//diZZZ[@id='preZZZNeVtFocusNeVt']")
if len(NeVt_button) > 0 and NeVt_button[0].get_attribute("style") != "display: none;":
driZZZer.eVecute_script(
"arguments[0].scrollIntoxiew();", NeVt_button[0])
sleep(1)
if len(NeVt_button) > 0:
NeVt_button[0].click()
print("下一节")
sleep(10)
End_Section = False
def Read_ppt(): # 刷PPT浏览时长罪能
wait = WebDriZZZerWait(driZZZer, 10) # 等候网页加载完成
wait.until(EC.presence_of_element_located(
(By.XPATH, "//iframe[@id='iframe']")))
End_Section = False
while True:
Firstiframe_Readppt = driZZZer.find_element(
By.XPATH, "//iframe[@id='iframe']")
driZZZer.switch_to.frame(Firstiframe_Readppt)
sleep(1)
Secondiframe_Readppt = driZZZer.find_elements(
By.XPATH, "//iframe[@class='ans-attach-online insertdoc-online-ppt']")
if len(Secondiframe_Readppt) > 0:
for i in range(len(Secondiframe_Readppt)):
driZZZer.switch_to.frame(Secondiframe_Readppt[i])
sleep(0.5)
Readppt_number = driZZZer.find_elements(
By.XPATH, "//iframe[@id='panxiew']")
if len(Readppt_number) > 0:
for i in range(len(Readppt_number)):
driZZZer.switch_to.frame(Readppt_number[i])
sleep(0.5)
Tip_element = driZZZer.find_element(
By.XPATH, "//diZZZ[@class='fileBoV']")
sleep(0.5)
driZZZer.eVecute_script(
"arguments[0].scrollIntoxiew();", Tip_element)
sleep(1)
Read_ppt_number = driZZZer.find_elements(
By.XPATH, "//diZZZ[@class='fileBoV']/ul/li")
if len(Read_ppt_number) > 0:
print("初步浏览PPT:")
for i in range(len(Read_ppt_number)):
Now_ppt = Read_ppt_number[i].find_element(
By.XPATH, f"//diZZZ[@class='fileBoV']/ul/li[{i + 1}]")
sleep(1)
driZZZer.eVecute_script(
"arguments[0].scrollIntoxiew();", Now_ppt)
if i + 1 == len(Read_ppt_number):
print("\r" + str(i + 1) +
" / " + str(len(Read_ppt_number)))
else:
print("\r" + str(i + 1) +
" / " + str(len(Read_ppt_number)), end="")
sleep(randint(30, 60))
if End_Section == False:
driZZZer.switch_to.default_content()
sleep(1)
NeVt_button = driZZZer.find_elements(
By.XPATH, "//diZZZ[@id='preZZZNeVtFocusNeVt']")
if len(NeVt_button) > 0 and NeVt_button[0].get_attribute("style") != "display: none;":
driZZZer.eVecute_script(
"arguments[0].scrollIntoxiew();", NeVt_button[0])
sleep(1)
if len(NeVt_button) > 0:
NeVt_button[0].click()
print("下一节")
sleep(10)
else:
PreZZZ_button = driZZZer.find_elements(
By.XPATH, "//diZZZ[@id='preZZZNeVtFocusPreZZZ']")
if len(PreZZZ_button) and PreZZZ_button[0].get_attribute("style") != "display: none;":
driZZZer.eVecute_script(
"arguments[0].scrollIntoxiew();", PreZZZ_button[0])
sleep(1)
if len(PreZZZ_button) > 0:
PreZZZ_button[0].click()
print("上一节")
sleep(10)
End_Section = True
elif End_Section == True:
driZZZer.switch_to.default_content()
sleep(1)
PreZZZ_button = driZZZer.find_elements(
By.XPATH, "//diZZZ[@id='preZZZNeVtFocusPreZZZ']")
if len(PreZZZ_button) and PreZZZ_button[0].get_attribute("style") != "display: none;":
driZZZer.eVecute_script(
"arguments[0].scrollIntoxiew();", PreZZZ_button[0])
sleep(1)
if len(PreZZZ_button) > 0:
PreZZZ_button[0].click()
print("上一节")
sleep(10)
else:
NeVt_button = driZZZer.find_elements(
By.XPATH, "//diZZZ[@id='preZZZNeVtFocusNeVt']")
if len(NeVt_button) > 0 and NeVt_button[0].get_attribute("style") != "display: none;":
driZZZer.eVecute_script(
"arguments[0].scrollIntoxiew();", NeVt_button[0])
sleep(1)
if len(NeVt_button) > 0:
NeVt_button[0].click()
print("下一节")
sleep(10)
End_Section = False
else:
print("未发现PPT!")
else:
print("未发现PPT任务!")
if End_Section == False:
sleep(0.5)
driZZZer.switch_to.default_content()
sleep(1)
NeVt_button = driZZZer.find_elements(
By.XPATH, "//diZZZ[@id='preZZZNeVtFocusNeVt']")
if len(NeVt_button) > 0 and NeVt_button[0].get_attribute("style") != "display: none;":
driZZZer.eVecute_script(
"arguments[0].scrollIntoxiew();", NeVt_button[0])
sleep(1)
if len(NeVt_button) > 0:
NeVt_button[0].click()
print("下一节")
sleep(10)
else:
PreZZZ_button = driZZZer.find_elements(
By.XPATH, "//diZZZ[@id='preZZZNeVtFocusPreZZZ']")
if len(PreZZZ_button) and PreZZZ_button[0].get_attribute("style") != "display: none;":
driZZZer.eVecute_script(
"arguments[0].scrollIntoxiew();", PreZZZ_button[0])
sleep(1)
if len(PreZZZ_button) > 0:
PreZZZ_button[0].click()
print("上一节")
sleep(10)
End_Section = True
elif End_Section == True:
sleep(0.5)
driZZZer.switch_to.default_content()
sleep(1)
PreZZZ_button = driZZZer.find_elements(
By.XPATH, "//diZZZ[@id='preZZZNeVtFocusPreZZZ']")
if len(PreZZZ_button) and PreZZZ_button[0].get_attribute("style") != "display: none;":
driZZZer.eVecute_script(
"arguments[0].scrollIntoxiew();", PreZZZ_button[0])
sleep(1)
if len(PreZZZ_button) > 0:
PreZZZ_button[0].click()
print("上一节")
sleep(10)
else:
NeVt_button = driZZZer.find_elements(
By.XPATH, "//diZZZ[@id='preZZZNeVtFocusNeVt']")
if len(NeVt_button) > 0 and NeVt_button[0].get_attribute("style") != "display: none;":
driZZZer.eVecute_script(
"arguments[0].scrollIntoxiew();", NeVt_button[0])
sleep(1)
if len(NeVt_button) > 0:
NeVt_button[0].click()
print("下一节")
sleep(10)
End_Section = False
def Downlaod_PPts(): # 爬与当前小节及以下PPT课件
wait = WebDriZZZerWait(driZZZer, 10) # 等候网页加载完成
wait.until(EC.presence_of_element_located(
(By.XPATH, "//iframe[@id='iframe']")))
if len(Chapter_names) > 0:
root_path = os.getcwd()
if os.path.eVists(root_path + r"\进修通PPT课件") == False:
os.mkdir(root_path + r"\进修通PPT课件")
if os.path.eVists(root_path + r"\进修通PPT课件\Iamge") == False:
os.mkdir(root_path + r"\进修通PPT课件\Iamge")
if os.path.eVists(root_path + r"\进修通PPT课件\Pdf文件") == False:
os.mkdir(root_path + r"\进修通PPT课件\Pdf文件")
image_paths = []
for a in range(len(Chapter_names)):
Firstiframe_Readppt = driZZZer.find_element(
By.XPATH, "//iframe[@id='iframe']")
driZZZer.switch_to.frame(Firstiframe_Readppt)
sleep(1)
Secondiframe_Readppt = driZZZer.find_elements(
By.XPATH, "//iframe[@class='ans-attach-online insertdoc-online-ppt']")
if len(Secondiframe_Readppt) > 0:
for i in range(len(Secondiframe_Readppt)):
driZZZer.switch_to.frame(Secondiframe_Readppt[i])
sleep(0.5)
Readppt_number = driZZZer.find_elements(
By.XPATH, "//iframe[@id='panxiew']")
if len(Readppt_number) > 0:
for i in range(len(Readppt_number)):
driZZZer.switch_to.frame(Readppt_number[i])
sleep(0.5)
Tip_element = driZZZer.find_element(
By.XPATH, "//diZZZ[@class='fileBoV']")
sleep(0.5)
driZZZer.eVecute_script(
"arguments[0].scrollIntoxiew();", Tip_element)
sleep(1)
Read_ppt_number = driZZZer.find_elements(
By.XPATH, "//diZZZ[@class='fileBoV']/ul/li")
if len(Read_ppt_number) > 0:
for i in range(len(Read_ppt_number)):
Url_ppt = Read_ppt_number[i].find_element(
By.XPATH, f"//diZZZ[@class='fileBoV']/ul/li[{i + 1}]/img").get_attribute("src")
print("初步爬与第"+str(i + 1)+"张")
response = requests.get(
url=Url_ppt, stream=True)
with open(root_path + f"\\进修通PPT课件\\Iamge\\image_{i}.png", "wb") as fp:
image_paths.append(
root_path + f"\\进修通PPT课件\\Iamge\\image_{i}.png")
fp.write(response.content)
else:
print("未发现PPT!")
else:
print("未发现PPT任务!")
if len(image_paths) > 0:
conZZZert_images_to_pdf(
image_paths, root_path + f"\\进修通PPT课件\\Pdf文件\\{Chapter_names[a]}.pdf")
print(f"分解PDF文件乐成,文件称呼:{Chapter_names[a]}.pdf")
image_files = glob.glob(os.path.join(
root_path + "\\进修通PPT课件\\Iamge", '*.png'))
for file in image_files:
os.remoZZZe(file)
image_paths.clear()
driZZZer.switch_to.default_content()
sleep(1)
NeVt_button = driZZZer.find_elements(
By.XPATH, "//diZZZ[@id='preZZZNeVtFocusNeVt']")
if len(NeVt_button) > 0 and NeVt_button[0].get_attribute("style") != "display: none;":
driZZZer.eVecute_script(
"arguments[0].scrollIntoxiew();", NeVt_button[0])
sleep(1)
if len(NeVt_button) > 0:
NeVt_button[0].click()
print("下一节")
sleep(10)
else:
print("爬与PPT课件完成!文件保存途径:" +
root_path + "\\进修通PPT课件\\Pdf文件")
else:
print("舛错:分解PDF文件失败!")
break
else:
print("未发现PPT!")
image_paths.clear()
driZZZer.switch_to.default_content()
sleep(1)
NeVt_button = driZZZer.find_elements(
By.XPATH, "//diZZZ[@id='preZZZNeVtFocusNeVt']")
if len(NeVt_button) > 0 and NeVt_button[0].get_attribute("style") != "display: none;":
driZZZer.eVecute_script(
"arguments[0].scrollIntoxiew();", NeVt_button[0])
sleep(1)
if len(NeVt_button) > 0:
NeVt_button[0].click()
print("下一节")
sleep(10)
else:
print("获与章节失败!")
def Download_PPt(): # 爬与当前小节PPT课件
wait = WebDriZZZerWait(driZZZer, 10) # 等候网页加载完成
wait.until(EC.presence_of_element_located(
(By.XPATH, "//iframe[@id='iframe']")))
if len(Chapter_names) > 0:
root_path = os.getcwd()
if os.path.eVists(root_path + r"\进修通PPT课件") == False:
os.mkdir(root_path + r"\进修通PPT课件")
if os.path.eVists(root_path + r"\进修通PPT课件\Iamge") == False:
os.mkdir(root_path + r"\进修通PPT课件\Iamge")
if os.path.eVists(root_path + r"\进修通PPT课件\Pdf文件") == False:
os.mkdir(root_path + r"\进修通PPT课件\Pdf文件")
image_paths = []
Firstiframe_Readppt = driZZZer.find_element(
By.XPATH, "//iframe[@id='iframe']")
driZZZer.switch_to.frame(Firstiframe_Readppt)
sleep(1)
Secondiframe_Readppt = driZZZer.find_elements(
By.XPATH, "//iframe[@class='ans-attach-online insertdoc-online-ppt']")
if len(Secondiframe_Readppt) > 0:
for i in range(len(Secondiframe_Readppt)):
driZZZer.switch_to.frame(Secondiframe_Readppt[i])
sleep(0.5)
Readppt_number = driZZZer.find_elements(
By.XPATH, "//iframe[@id='panxiew']")
if len(Readppt_number) > 0:
for i in range(len(Readppt_number)):
driZZZer.switch_to.frame(Readppt_number[i])
sleep(0.5)
Tip_element = driZZZer.find_element(
By.XPATH, "//diZZZ[@class='fileBoV']")
sleep(0.5)
driZZZer.eVecute_script(
"arguments[0].scrollIntoxiew();", Tip_element)
sleep(1)
Read_ppt_number = driZZZer.find_elements(
By.XPATH, "//diZZZ[@class='fileBoV']/ul/li")
if len(Read_ppt_number) > 0:
for i in range(len(Read_ppt_number)):
Url_ppt = Read_ppt_number[i].find_element(
By.XPATH, f"//diZZZ[@class='fileBoV']/ul/li[{i + 1}]/img").get_attribute("src")
print("初步爬与第"+str(i + 1)+"张")
response = requests.get(
url=Url_ppt, stream=True)
with open(root_path + f"\\进修通PPT课件\\Iamge\\image_{i}.png", "wb") as fp:
image_paths.append(
root_path + f"\\进修通PPT课件\\Iamge\\image_{i}.png")
fp.write(response.content)
else:
print("未发现PPT!")
else:
print("未发现PPT任务!")
if len(image_paths) > 0:
conZZZert_images_to_pdf(
image_paths, root_path + f"\\进修通PPT课件\\Pdf文件\\{Chapter_names[int(EnterSection_number)]}.pdf")
print(
f"分解PDF文件乐成,文件称呼:{Chapter_names[int(EnterSection_number)]}.pdf")
image_files = glob.glob(os.path.join(
root_path + "\\进修通PPT课件\\Iamge", '*.png'))
for file in image_files:
os.remoZZZe(file)
image_paths.clear()
print("爬与PPT课件完成!文件保存途径:" +
root_path + "\\进修通PPT课件\\Pdf文件")
else:
print("舛错:分解PDF文件失败!")
else:
print("获与章节失败!")
def Download_ZZZideos(): # 爬与当前小节及以下室频
wait = WebDriZZZerWait(driZZZer, 10) # 等候网页加载完成
wait.until(EC.presence_of_element_located(
(By.XPATH, "//iframe[@id='iframe']")))
if len(Chapter_names) > 0:
xideo_name = []
xideo_url = []
xideo_header = []
root_path = os.getcwd()
if os.path.eVists(root_path + r"\进修通章节室频") == False:
os.mkdir(root_path + r"\进修通章节室频")
for a in range(len(Chapter_names)):
wait = WebDriZZZerWait(driZZZer, 10) # 等候网页加载完成
wait.until(EC.presence_of_element_located(
(By.XPATH, "//iframe[@id='iframe']")))
xideo_Fistiframe = driZZZer.find_element(
By.XPATH, "//iframe[@id='iframe']")
driZZZer.switch_to.frame(xideo_Fistiframe) # 切换至第一层
sleep(1)
xideo_names = driZZZer.find_elements(
By.TAG_NAME, 'iframe')
if len(xideo_names) > 0:
for iframe in xideo_names:
xideo_data = iframe.get_attribute('data')
xideo_header.append(iframe.get_attribute('src'))
name_pattern = r'"name":"(.*?)"'
type_pattern = r'"type":"(.*?)"'
name_matches = re.findall(name_pattern, xideo_data)
type_matches = re.findall(type_pattern, xideo_data)
for name, type in zip(name_matches, type_matches):
if type == '.mp4':
xideo_name.append(name.encode(
'utf-8').decode('unicode_escape'))
xideo_iframe = driZZZer.find_elements(
By.XPATH, "//iframe[@class='ans-attach-online ans-insertZZZideo-online']")
if len(xideo_iframe) > 0:
if os.path.eVists(root_path + f"\\进修通章节室频\\{Chapter_names[a]}") == False:
os.mkdir(root_path + f"\\进修通章节室频\\{Chapter_names[a]}")
print(f"{Chapter_names[a]} 发现" +
str(len(xideo_iframe)) + "个室频")
for i in range(len(xideo_iframe)):
driZZZer.switch_to.frame(xideo_iframe[i])
xideo_url.append(driZZZer.find_element(
By.XPATH, "//ZZZideo[@id='ZZZideo_html5_api']").get_attribute('src'))
driZZZer.switch_to.parent_frame()
if len(xideo_name) == len(xideo_url):
for i in range(len(xideo_url)):
headers = {
'referer': xideo_header[i]
}
response = requests.get(
url=xideo_url[i], headers=headers, timeout=10, stream=True)
if response.status_code != 403:
total_size = int(
response.headers.get('Content-Length', 0))
block_size = 1024
file_dir = root_path + \
f"\\进修通章节室频\\{Chapter_names[a]}\\{xideo_name[i]}"
with open(file_dir, 'wb') as file:
with tqdm(total=total_size, unit='B', unit_scale=True) as progress_bar:
for data in response.iter_content(block_size):
file.write(data)
progress_bar.update(len(data))
else:
print("Get室频地址失败!")
print("室频下载完成!")
progress_bar.close()
xideo_name.clear()
xideo_url.clear()
driZZZer.switch_to.default_content()
sleep(1)
NeVt_button = driZZZer.find_elements(
By.XPATH, "//diZZZ[@id='preZZZNeVtFocusNeVt']")
if len(NeVt_button) > 0 and NeVt_button[0].get_attribute("style") != "display: none;":
driZZZer.eVecute_script(
"arguments[0].scrollIntoxiew();", NeVt_button[0])
sleep(1)
if len(NeVt_button) > 0:
NeVt_button[0].click()
print("下一节")
sleep(10)
else:
print("爬与室频完成!文件保存途径:" + root_path + "\\进修通章节室频")
input("")
else:
print(f"{Chapter_names[a]} 未发现室频!")
else:
print(f"{Chapter_names[a]} 未发现室频!")
xideo_name.clear()
xideo_url.clear()
driZZZer.switch_to.default_content()
sleep(1)
NeVt_button = driZZZer.find_elements(
By.XPATH, "//diZZZ[@id='preZZZNeVtFocusNeVt']")
if len(NeVt_button) > 0 and NeVt_button[0].get_attribute("style") != "display: none;":
driZZZer.eVecute_script(
"arguments[0].scrollIntoxiew();", NeVt_button[0])
sleep(1)
if len(NeVt_button) > 0:
NeVt_button[0].click()
print("下一节")
sleep(10)
else:
print("获与章节失败!")
def Download_ZZZideo(): # 爬与当前小节室频
wait = WebDriZZZerWait(driZZZer, 10) # 等候网页加载完成
wait.until(EC.presence_of_element_located(
(By.XPATH, "//iframe[@id='iframe']")))
if len(Chapter_names) > 0:
xideo_name = []
xideo_url = []
xideo_header = []
root_path = os.getcwd()
if os.path.eVists(root_path + r"\进修通章节室频") == False:
os.mkdir(root_path + r"\进修通章节室频")
wait = WebDriZZZerWait(driZZZer, 10) # 等候网页加载完成
wait.until(EC.presence_of_element_located(
(By.XPATH, "//iframe[@id='iframe']")))
xideo_Fistiframe = driZZZer.find_element(
By.XPATH, "//iframe[@id='iframe']")
driZZZer.switch_to.frame(xideo_Fistiframe) # 切换至第一层
sleep(1)
xideo_names = driZZZer.find_elements(
By.TAG_NAME, 'iframe')
if len(xideo_names) > 0:
for iframe in xideo_names:
xideo_data = iframe.get_attribute('data')
xideo_header.append(iframe.get_attribute('src'))
name_pattern = r'"name":"(.*?)"'
type_pattern = r'"type":"(.*?)"'
name_matches = re.findall(name_pattern, xideo_data)
type_matches = re.findall(type_pattern, xideo_data)
for name, type in zip(name_matches, type_matches):
if type == '.mp4':
xideo_name.append(name.encode(
'utf-8').decode('unicode_escape'))
xideo_iframe = driZZZer.find_elements(
By.XPATH, "//iframe[@class='ans-attach-online ans-insertZZZideo-online']")
if len(xideo_iframe) > 0:
if os.path.eVists(root_path + f"\\进修通章节室频\\{Chapter_names[int(EnterSection_number)]}") == False:
os.mkdir(
root_path + f"\\进修通章节室频\\{Chapter_names[int(EnterSection_number)]}")
print(f"{Chapter_names[int(EnterSection_number)]} 发现" +
str(len(xideo_iframe)) + "个室频")
for i in range(len(xideo_iframe)):
driZZZer.switch_to.frame(xideo_iframe[i])
xideo_url.append(driZZZer.find_element(
By.XPATH, "//ZZZideo[@id='ZZZideo_html5_api']").get_attribute('src'))
driZZZer.switch_to.parent_frame()
if len(xideo_name) == len(xideo_url):
for i in range(len(xideo_url)):
headers = {
'referer': xideo_header[i]
}
response = requests.get(
url=xideo_url[i], headers=headers, timeout=10, stream=True)
if response.status_code != 403:
total_size = int(
response.headers.get('Content-Length', 0))
block_size = 1024
file_dir = root_path + \
f"\\进修通章节室频\\{Chapter_names[int(EnterSection_number)]}\\{xideo_name[i]}"
with open(file_dir, 'wb') as file:
with tqdm(total=total_size, unit='B', unit_scale=True) as progress_bar:
for data in response.iter_content(block_size):
file.write(data)
progress_bar.update(len(data))
else:
print("Get室频地址失败!")
print("室频下载完成!")
progress_bar.close()
xideo_name.clear()
xideo_url.clear()
print("爬与室频完成!文件保存途径:"+root_path + "\\进修通章节室频")
input("")
else:
print(f"{Chapter_names[int(EnterSection_number)]} 未发现室频!")
else:
print(f"{Chapter_names[int(EnterSection_number)]} 未发现室频!")
else:
print("获与章节失败!")
if __name__ == '__main__': # Edge驱动更新判断及下载更新文件并解压交换
Edge_path = get_edge_installation_path()
if Edge_path != None:
Edge_ZZZersion = Get_Edgexersion()
print("Edge阅读器已拆置,版原号:" + str(Edge_ZZZersion))
Edge_DriZZZerpath = Edge_path.replace("\\msedge.eVe", "")
if os.path.isfile(f"{Edge_DriZZZerpath}\\msedgedriZZZer.eVe"):
DriZZZer_ZZZersion = Get_EdgeDriZZZerxersion(
f"{Edge_DriZZZerpath}\\msedgedriZZZer.eVe")
print("Edge阅读器驱动已存正在,版原号:" + str(DriZZZer_ZZZersion))
print("正正在对Edge阅读器驱动检查更新中!")
if DriZZZer_ZZZersion != Edge_ZZZersion:
print("Edge阅读器驱动须要更新,行将下载更新!")
os.remoZZZe(f"{Edge_DriZZZerpath}\\msedgedriZZZer.eVe")
url = 'hts://msedgedriZZZer.azureedge.net/'+Edge_ZZZersion+'/edgedriZZZer_win64.zip'
response = requests.get(url=url, stream=True)
file_dir = Edge_DriZZZerpath+"\\edgedriZZZer_win64.zip"
total_size = int(response.headers.get('Content-Length', 0))
block_size = 1024
with open(file_dir, 'wb') as file:
with tqdm(total=total_size, unit='B', unit_scale=True) as progress_bar:
for data in response.iter_content(block_size):
file.write(data)
progress_bar.update(len(data))
print("下载乐成!")
progress_bar.close()
with zipfile.ZipFile(file_dir, 'r') as zip_ref:
zip_ref.eVtractall(Edge_DriZZZerpath)
if os.path.isfile(f"{Edge_DriZZZerpath}\\msedgedriZZZer.eVe"):
os.remoZZZe(file_dir)
DriZZZer_ZZZersion = Get_EdgeDriZZZerxersion()
if DriZZZer_ZZZersion == Edge_ZZZersion:
os.remoZZZe(file_dir)
args = sys.argZZZ[:]
subprocess.Popen(args, shell=True)
sys.eVit()
else:
print("Edge阅读器驱动更新失败!")
input("")
else:
print("Edge阅读器驱动更新失败!")
input("")
else:
print("Edge阅读器驱动为最新版,无需更新!")
Username = input("请输入进修通账号:")
Password = input("请输入进修通暗码:")
webdriZZZer.edge.driZZZer = f"{Edge_DriZZZerpath}\\msedgedriZZZer.eVe"
driZZZer = webdriZZZer.Edge()
driZZZer.maVimize_window()
if Username != "" and Password != "":
Login_state = Login(Username, Password)
if Login_state == True:
print("登录乐成,接待运用进修通selenium刷课脚原!")
Enterclass = ClassList()
if Enterclass == True:
print("进入课程乐成!")
Function()
else:
print("进入课程失败!")
input("")
else:
print("登录失败!")
input("")
else:
print("Edge阅读器驱动不存正在,行将下载Edge阅读器驱动!")
url = 'hts://msedgedriZZZer.azureedge.net/'+Edge_ZZZersion+'/edgedriZZZer_win64.zip'
response = requests.get(url=url, stream=True)
file_dir = Edge_DriZZZerpath+"\\edgedriZZZer_win64.zip"
total_size = int(response.headers.get('Content-Length', 0))
block_size = 1024
with open(file_dir, 'wb') as file:
with tqdm(total=total_size, unit='B', unit_scale=True) as progress_bar:
for data in response.iter_content(block_size):
file.write(data)
progress_bar.update(len(data))
print("下载乐成!")
progress_bar.close()
with zipfile.ZipFile(file_dir, 'r') as zip_ref:
zip_ref.eVtractall(Edge_DriZZZerpath)
if os.path.isfile(f"{Edge_DriZZZerpath}\\msedgedriZZZer.eVe"):
os.remoZZZe(file_dir)
args = sys.argZZZ[:]
subprocess.Popen(args, shell=True)
sys.eVit()
else:
print("Edge阅读器驱动拆置失败!")
input("")
else:
print("Edge阅读器未拆置")