DrissionPage 自动播放

import datetime
import time
from DrissionPage import ChromiumPage


watching_type = input("选择播放视频类型(1.全部视频 2.必看视频 默认为全部视频):")

if watching_type is None or watching_type=="":
    watching_type = 1

while True:
    try:
        watching_type = int(watching_type)
    except:
        print("选择错误,请重新选择(只需要输入编号即可)")
        watching_type = int(input("选择播放视频类型(1.全部视频 2.必看视频 默认为全部视频):"))
    else:
        if watching_type != 1 and watching_type != 2:
            print("选择错误,请重新选择(只需要输入编号即可)")
            watching_type = int(input("选择播放视频类型(1.全部视频 2.必看视频 默认为全部视频):"))
        else:
            break
if watching_type == 1:
    print(f"[{datetime.datetime.now()}] 当前选择:{watching_type}.全部视频")
else:
    print(f"[{datetime.datetime.now()}] 当前选择:{watching_type}.必看视频")

print(f"[{datetime.datetime.now()}] 启动Chrome浏览器.")
# 创建页面对象,并启动或接管浏览器
page = ChromiumPage()

print(f"[{datetime.datetime.now()}] 访问学习中心,检测是否已经登录.")
page.get("https://learning.shou.org.cn/scenter")
try:
    page.ele('#username',timeout=3)
    print(f"[{datetime.datetime.now()}] 检测到用户未登录,请手动登录账号。")
    input("登录成功后按回车继续:")
except:
    print(f"[{datetime.datetime.now()}] 检测用户已登录")

courses = {}
print(f"[{datetime.datetime.now()}] 收集课程列表信息")
course_list = page.eles('.course-title')
for course in course_list:
    course_link = course.ele('tag:a').link
    course_name = course.ele('tag:a').text
    course_name = course_name.replace(" ","")
    courses[course_name] = course_link
    print(f"[{datetime.datetime.now()}] 课程名称:{course_name} 课程地址:{course_link}")

course_index = 0
for course in courses:
    course_index += 1
    print(f"[{datetime.datetime.now()}] 收集课程({course_index}/{len(courses)}):{course} 的视频信息,请耐心等待")
    watching_video_list = {}
    page.get(courses[course])
    LearningCatalog = page.ele('.process_container')
    course_dirs = page.eles('.dynamic_topic')
    for dir in course_dirs:
        try:
            dir.ele('.am-icon am-icon-caret-right sh-toc-expand topic_condensation').click()
            course_task_list = dir.ele('.sh-toc-list', timeout=1).eles('tag:a')
            for course_task in course_task_list:
                course_task_txt = course_task.text.replace(" ", "")

                course_task_link = course_task.link
                course_type = course_task.next('tag:span', 1, timeout=1).text
                if "视频" in course_type:
                    if watching_type == 2:
                        course_must_txt = course_task.next('text=(必看)', 1, timeout=1).text
                    course_status = course_task.next('tag:img', 1, timeout=1).link
                    if "yellow" in course_status:
                        status = "未完成"
                    elif "white" in course_status:
                        status = "未看"
                    else:
                        status = "已完成"

                    print(
                        f"[{datetime.datetime.now()}] 课程({course_index}/{len(courses)}):{course}  {status}视频:{course_task_txt}")
                    if status == "已完成":
                        continue
                    watching_video_list[course_task_txt] = course_task_link
        except:
            continue

    if len(watching_video_list) == 0:
        print(f"[{datetime.datetime.now()}] 课程({course_index}/{len(courses)}):{course} 所有必看视频已全部播放完毕。")
    else:
        print(f"[{datetime.datetime.now()}] 开始观看课程({course_index}/{len(courses)}):{course} 视频,共{len(watching_video_list)}个视频。")
        index = 1
        for watching_video in watching_video_list:
            page.get(watching_video_list[watching_video])

            play_status = ""
            try_num = 1
            while True:
                if try_num >= 5:
                    print(f"[{datetime.datetime.now()}] 课程({course_index}/{len(courses)}):{course} 视频({index}/{len(watching_video_list)}):{watching_video} 达到最大重试次数,跳过此视频,请后续手动观看.")
                    play_status = False
                    break
                try:
                    buttons = page.ele('.dplayer-icon dplayer-play-icon').click()
                    play_status = True
                    break
                except BaseException as e:
                    print(f"[{datetime.datetime.now()}] 课程({course_index}/{len(courses)}):{course} 视频({index}/{len(watching_video_list)}):{watching_video} 未找到播放按钮,1秒后重试.error:{e}")
                    play_status = False
                    try_num += 1
                    time.sleep(1)
            if play_status:
                while True:
                    ptime = page.ele('.dplayer-ptime', timeout=3).text
                    dtime = page.ele('.dplayer-dtime', timeout=3).text
                    if ptime == dtime and ptime != "0:00":
                        print("\r", end="")
                        print(f"[{datetime.datetime.now()}] 课程({course_index}/{len(courses)}):{course} 视频({index}/{len(watching_video_list)}):{watching_video} 当前播放进度:{ptime}/{dtime} 已播放完毕.",flush=True, end="")
                        print("")
                        index += 1
                        break
                    else:
                        print("\r", end="")
                        print(f"[{datetime.datetime.now()}] 课程({course_index}/{len(courses)}):{course}  视频({index}/{len(watching_video_list)}):{watching_video} 当前播放进度:{ptime}/{dtime}",flush=True,end="")
                        time.sleep(3)

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【资源说明】 基于DrissionPage实现的获取快手直播间实时礼物、聊天、点赞信息python源码+使用说明+详细注释.zip 环境要求 建议使用conda虚拟环境部署,python版本要求大于或等于``3.6`` 环境安装 首先你需要将本项目克隆到你本地。 然后您只需要使用下面命令即可一键安装所需的环境 ```bash pip3 install -r requirements.txt ``` 如果pip下载速度较慢,请使用下面这个命令 ``` pip3 install -r requirements.txt -i http://pypi.douban.com/simple/ ``` 配置 在使用前,你需要完成一些基本配置 所有配置你只需要在``config.py``文件中完成,如果你不懂任何技术,请不要修改除``config.py``文件外的任何文件。 你主要是需要去配置``LIVE_URL``选项,去指定直播间的地址,配置实例 ```py LIVE_URL = r"https://live.kuaishou.com/u/KPL704668133" ``` 上面这个代码我指定了KPL直播间地址。 其次,你需要配置``BROWSER_PATH``选项,该选项需要你指定浏览器可执行文件的路径,在默认的配置中,我使用了``edge``浏览器作为驱动。 你可以配置任何使用``chromium``内核构建的浏览器,例如``Microsoft Edge``或者是``Google Chrome``等。 ```py BROWSER_PATH = r'C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe' ``` 其他选项对于本项目的运行影响不大,你可以看选项上面的注释进行配置 运行 如果你完成了上述的配置,使用以下命令进行启动本项目 ```bash python main.py ``` 未知礼物 由于时效性问题,可能导致一些礼物无法识别,此时,你需要额外配置一些未知的礼物。 程序会将获取到的未知的例如默认存放到``unknow_gift``目录(你可以在``config.py``中修改这个路径),名称为:礼物图片md5.png,你需要将``礼物图片md5``改为礼物真实的名称,例如,原始文件名``580c253e0bd3cc4212f7087d110691ed.png``,你需要改为``粉丝团.png`` 最后你需要执行以下命令完成礼物的导入 ```shell python import_git.py ``` 事件开发 如果你在获取到礼物、收到聊天信息、收到点赞后想实现一些业务流程处理,你需要在``handle.py``中实现。 该文件中共实现了三个方法,分别为``message``、``like``、``gift``分别代表了``消息``、``点赞``、``礼物`` 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载,沟通交流,互相学习,共同进步!
DrissionPage是一款基于Python语言编写的自动化测试框架。它采用了Page Object设计模式,将页面元素和测试逻辑分离,使得测试脚本更易读、易维护。 DrissionPage的框架结构清晰,包含了核心模块和扩展模块。核心模块主要包括Page模块、Element模块和Driver模块。Page模块用于封装页面对象,如登录页面、首页等;Element模块用于封装页面元素,如按钮、输入框等;Driver模块用于封装浏览器驱动,如Chrome、Firefox等。这些模块相互配合,提供了丰富的功能和方法,使得自动化测试变得简单高效。 DrissionPage的特点之一是支持多种浏览器,并提供了多个浏览器驱动的封装。用户可以根据需求选择不同的浏览器进行测试,并通过配置文件简单切换。同时,DrissionPage还提供了丰富的断言方法和日志记录功能,方便用户进行结果验证和错误追踪。 另外,DrissionPage还支持数据驱动和关键字驱动的测试方式。用户可以将测试数据与测试脚本分离,实现数据的复用和灵活性。同时,用户可以根据需求定义自己的关键字,简化测试脚本的编写和维护。 总之,DrissionPage是一个功能强大的自动化测试框架,它的设计理念和丰富的功能使得自动化测试变得简单高效。无论是初学者还是有经验的测试工程师,都可以通过学习和使用DrissionPage来提高测试效率和质量。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值