[脚本] 如果电脑不会自己看网氪,就应该用Python教会它

这篇具有很好参考价值的文章主要介绍了[脚本] 如果电脑不会自己看网氪,就应该用Python教会它。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

很多时候需要看网课完成一下学习任务,但在某些平台在播完一条视频后并不会自动切播到下一条。所以这里简单用python写了一个脚本,利用PyAutoGui库自动完成一些如鼠标移动点击来快速切换的操作。

源码地址

现已将代码上传至GitHub仓库(其中包含一些其它帮助学习的程序):

https://github.com/Z-MiCTrue/Auto_Stuendthttps://github.com/Z-MiCTrue/Auto_Stuendt

环境准备

需要安装的库有:

numpy
opencv-python
pyautogui

目录结构

│  main.py
│  params.txt
│
└─templates
        1.png
        2.png
        ......

代码速览

整体代码(auto_view.py):

import sys
import time

from PIL import ImageGrab
import numpy as np
import cv2
import pyautogui


# 倒数计时并打印
def countdown(total_time: int):
    for t in range(total_time):
        r = '\rcountdown: %ds [%s%s]' % ((total_time - t), '=' * (total_time - t), ' ' * t)
        sys.stdout.write(r)
        time.sleep(1)
        sys.stdout.flush()
    print('\nstart to work')


# 读取txt数据
def txt2cache(filename):
    with open(filename, 'r', encoding='utf-8') as cache_data_txt:
        cache_data = cache_data_txt.read()
        cache_data = eval(cache_data)  # eval函数用来执行一个字符串表达式, 这里是实例化字典
    return cache_data


#  模板匹配
def template_match(img, template, mask=None):
    if len(img.shape) > 2:
        img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    if len(template.shape) > 2:
        template = cv2.cvtColor(template, cv2.COLOR_BGR2GRAY)
    result = cv2.matchTemplate(img, template, cv2.TM_CCOEFF_NORMED, mask)  # cv2的模板匹配
    minVal, maxVal, minLoc, maxLoc = cv2.minMaxLoc(result)  # 返回最大最小值及索引
    (x_1, y_1) = maxLoc
    x_2 = x_1 + template.shape[1]
    y_2 = y_1 + template.shape[0]
    # cv2.rectangle(img, (x_1, y_1), (x_2, y_2), 0, 2)  # 画出匹配框
    return np.array([x_1, y_1, x_2, y_2])


class Auto_View:
    def __init__(self, params_txt):
        params = txt2cache(params_txt)  # 从txt中读取配置
        self.screen_roi = params['screen_roi']  # 屏幕分辨率
        self.command_list = params['commands']  # 操作指令列表

    def grab_img(self):
        # 截图
        img = ImageGrab.grab(bbox=self.screen_roi)
        # 转为 cv2 格式
        img = cv2.cvtColor(np.array(img.convert('RGB')), cv2.COLOR_RGB2BGR)
        return img

    def start_work(self):
        countdown(5)
        for i, command in enumerate(self.command_list):
            print(f'perform operation: {i}')
            # 如果是路径字符串: 截图 + 读图匹配 + 鼠标点击
            if type(command) is str:
                img = self.grab_img()  # 截图
                match_res = template_match(img, cv2.imread(command, 0), mask=None)  # 读图匹配
                mouse_loc = np.array([np.mean(match_res[[0, 2]]), np.mean(match_res[[1, 3]])])
                pyautogui.click(x=mouse_loc[0], y=mouse_loc[1], clicks=1, interval=0, button='left')  # 鼠标点击
            # 如果是数: 则等待相应时间
            elif type(command) in (int, float):
                time.sleep(command)
        print('finish')


if __name__ == '__main__':
    auto_view = Auto_View('params.txt')
    auto_view.start_work()

其中 'params.txt' 内储存的是一个字典,示例内容如下:

{'screen_roi': (0, 0, 2560, 1600),
 'commands': [
'templates/1.png', 2, 
'templates/2.png', 3, 
'templates/3.png', 'templates/3.png', 'templates/3.png', 
'templates/4.png', 3,
'templates/5.png', 4,
'templates/6.png', 1]}

如此书写主要是方便打包成exe后在没有python环境的系统上使用,通过修改txt文件中的列表,即可完成对整个操作的修改。

这里设计的执行逻辑是:循环读取命令,如果是模板图片路径,则屏幕截图 + 读图匹配 + 移动鼠标点击;如果是数,则等待(网页打开、视频观看至结束)。详细看注释。

快速使用

依次截图需要点击的图标在templates文件夹下,如图:

[脚本] 如果电脑不会自己看网氪,就应该用Python教会它

修改 'params.txt' 内的屏幕分辨率,路径以及等待时间

运行auto_view.py

[脚本] 如果电脑不会自己看网氪,就应该用Python教会它

睡一觉 ......

明早起来课程全部看完文章来源地址https://www.toymoban.com/news/detail-442966.html

到了这里,关于[脚本] 如果电脑不会自己看网氪,就应该用Python教会它的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 如果还不会Elasticsearch这七个问题 那么你的Elasticsearch白学

    答:提高查询效率 答:elasticsearch-6.8.15binelasticsearch.bat 答:es图形化工具 更方便查询数据 答:elasticsearch-6.8.15headheadapache-tomcat-8.0.32binstartup.bat 答:1.没有配置跨域 2.没有开启elasticsearch 答:使用中文分词器 中文分词器就像一个词库 可以把一句话分成多个部分 只要词库里

    2023年04月08日
    浏览(34)
  • linux:docker采用volume时,如果是代码,volume里的内容改变时代码不会生效

    问题:         如描述 解决办法:         必须手动重启一次容器 docker restart xxx

    2024年02月11日
    浏览(28)
  • 如果代码已关联git仓库,但是想将代码提交到新的仓库,应该如何做?

    如果你已经将代码关联到了一个 Git 仓库,但是希望将代码提交到另一个远程仓库,可以按照以下步骤操作: 打开命令行终端并导航到你的本地代码仓库。 确保你当前在正确的分支上。你可以通过运行 git branch 命令来查看当前所在分支。如果需要切换到另一个分支,可以运行

    2024年02月06日
    浏览(33)
  • 如果被亚马逊AWS扣费,应该怎么办啊?(亚马逊AWS服务还是很棒的)

    这两天登录到亚马逊云账号中发现,下个月的未出账单为100多刀,咦,怎么会这样啊!然后我马上*度了一下,被亚马逊云扣费应该怎么办,按照网友经验,我试了一下,还真管用,现在把这个过程记录下来,如果有需要这方面帮助的朋友,可以借鉴试试看。希望能帮到各位看

    2024年02月11日
    浏览(33)
  • 如果把k8s比作一个餐厅,应该怎样通俗的解释 k8s的核心组件和运行原理

    可以通过以下方式理解Kubernetes的二级选项: Master节点: API Server(API服务器):API Server就像是餐厅的前台接待员,接收顾客的点餐请求,并将请求传达给相应的餐桌(Pod)。 etcd(键值存储):etcd就像是餐厅的菜单和订单记录本,它存储着餐厅的菜单信息、订单状态以及顾

    2024年02月11日
    浏览(33)
  • 如果测试出自己是否适合编程的工作?

    如何测试出自己是否适合编程的工作? 试着问自己如下的问题: 1、 你是因为对编程有兴趣,还是因为编程是薪水比较高的工作? 2、你对算法有兴趣吗?深入地思考过算法是如何演化的吗? 3、你是如何看待数据结构的作用的? 4、你认为编程的目的是什么? 5、你认为采用

    2023年04月26日
    浏览(35)
  • C++/PTA 关于深度优先搜索和逆序对的题应该不会很难吧这件事

    背景知识 深度优先搜索与 DFS 序 深度优先搜索算法(DFS)是一种用于遍历或搜索树或图的算法。以下伪代码描述了在树 T 上进行深度优先搜索的过程: 令 r 为树 T 的根,调用 DFS(T, r, L) 即可完成对 T 的深度优先搜索,保存在链表 L 中的排列被称为 DFS 序。相信聪明的你已经发

    2024年02月05日
    浏览(24)
  • LeetCode 刷题记录——从零开始记录自己一些不会的

    1. 最多可以摧毁的敌人城堡数目 题意 思路 两层循环,太low了 用一个变量记录前一个位置 代码 2. 到达终点的数字 题意 思路 代码 3. 单词的压缩编码 题意 思路 代码 思路2 去找到是否不同的单词具有相同的后缀,我们可以将其反序之后插入字典树中。例如,我们有 “time”

    2024年02月09日
    浏览(51)
  • 网络安全怎么学,才不会成为脚本小子?

    1、Web 安全相关概念(2 周) 了解网络安全相关法律法规 熟悉基本概念(SQL 注入、上传、XSS、CSRF、一句话木马等)。 通过(SQL 注入、上传、XSS、CSRF、一句话木马等)进行 Google; 阅读《精通脚本黑客》,虽然很旧也有错误,但是入门还是可以的; 看一些渗透笔记/视

    2024年02月02日
    浏览(33)
  • 电脑合上盖子无线网络不会断开

    控制面板硬件和声音电源选项系统设置 最终选择不会采取任何操作 选择不会采取任何操作

    2024年02月13日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包