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

article/2025/4/20 0:34:39

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

源码地址

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

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

环境准备

需要安装的库有:

numpy
opencv-python
pyautogui

目录结构

│  main.py
│  params.txt
│
└─templates1.png2.png......

代码速览

整体代码(auto_view.py):

import sys
import timefrom 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) = maxLocx_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 imgdef 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文件夹下,如图:

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

运行auto_view.py

睡一觉 ......

明早起来课程全部看完


http://chatgpt.dhexx.cn/article/XSh0eImr.shtml

相关文章

计算机网络第六章学习通题目及答案

目录 DNS FTP 第十一次练兵 WWW 电子邮件 第十二次练兵 DNS 3 【简答题】 域名系统的查询方式有哪两类?最常见的是哪一种? 我的答案: 递归查询和迭代查询,迭代查询。 域名系统DNS是因特网使用的命名系统,用来…

kafka命令行操作(for Linux)

kafka命令行操作主要分为三大类: 主题命令行操作、生产者命令行操作、消费者命令行操作。 注意: 命令行操作前提,启动kafka集群。 1. 主题命令行操作 1.1 查看主题命令行参数 a) 查询命令 [roothadoop102 ~]# /opt/module/kafka/bin/kafka…

【Kafka】kafka命令kafka-console-consumer.sh

文章目录 1.概述2.消息消费3.从开始位置消费4.显示key消费5.其他参数6.案例7.源码分析1.概述 转载:转载并且补充 kafka-console-consumer.sh 脚本是一个简易的消费者控制台。该 shell 脚本的功能通过调用 kafka.tools 包下的 ConsoleConsumer 类,并将提供的命令行参数全部传…

【Kafka】kafka命令 kafka-console-producer

文章目录 1.概述2.输入单挑数据3.批量导入数据3.无key型消息4.有key型消息1.概述 消费者:【Kafka】kafka命令kafka-console-consumer.sh kafka-console-producer 命令的常用参数如下 参数值类型说明有效值--bootstrap-serverString要连接的服务器必需(除非指定--broker-list…

kafka 命令、API

日萌社 人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新) 大数据组件使用 总文章 kafka 生产/消费API、offset管理/原理、kafka命令kafka 命令、APIKafka 安装、原理、使用mapreduce 实时消费 kafka 数据…

kafka命令行使用

kafka使用 查看Kafka当前的主题列表创建一个主题查看主题信息修改分区信息删除一个主题生成者推送消息消费者接收查看分组信息查看特定consumer group 详情 基于Kafka 2.13版本的操作 查看Kafka当前的主题列表 ./kafka-topics.sh --zookeeper 127.0.0.1:2181 --list创建一个主…

简单的kafka命令行操作

目录 一、主题topic命令行操作 1.查看操作主题的命令参数 2.连接kafka地址,创建名为kaf的主题,指定分区和副本数量 3.查看所有主题的名称 4.查看主题的详细信息 5.修改主题(修改分区数) 二、生产者命令行操作 1.查看操作生…

【kafka】三、kafka命令行操作

kafka命令行操作 kafka的相关操作命令脚本文件在bin目录下 查看所有的topic kafka-topics.sh --zookeeper hll1:2181 --list 或 kafka-topics.sh --zookeeper 192.168.171.132:2181 --listkafka-topics.sh:topic执行脚本 --zookeeper hll1:2181:需要的…

Kafka的命令行操作

一、topic命令 下面Windows命令需要把cmd路径切换到bin/windows下。 而Linux命令只需要在控制台切换到bin目录下即可。 下面都以Windows下的操作为例,在Linux下也是一样的。 1.1 查看主题命令的参数 kafka-topics.bat # Windows kafka-topics.sh # Linux输…

Kafka 命令行操作

1)查看当前服务器中的所有 topic bin/kafka-topics.sh --zookeeper backup01:2181 使用命令 bin/kafka-topics.sh --list 报异常,提示必须依赖zookeeper 前面我们就讲过kafka是依赖于zookeeper 连上zookeeper什么都没有输出,因为我们什…

kafka命令行操作大全

最近利用flink使用一个流式SQL处理平台,利用kafka, mysql, hive等组件比较多,命令行突然间需要操作一次记不住命令很麻烦,索性直接整理成笔记。 在 0.9.0.0 之后的 Kafka,出现了几个新变动,一个是在 Server 端增加了…

Kafka命令大全

kafka 脚本 connect-distributed.sh connect-mirror-maker.sh connect-standalone.sh kafka-acls.sh kafka-broker-api-versions.sh kafka-configs.sh kafka-console-consumer.sh kafka-console-producer.sh kafka-consumer-groups.sh kafka-consumer-perf-test.sh kafka-dele…

Kafka常用命令行命令

文章目录 Kafka常用命令kafka的基本操作(命令行操作)1.启动集群:2.查看当前服务器中的所有topic(在kafka目录下)3.创建主题topic(在kafka目录下)4.删除topic(在kafka目录下&#xff…

美国Stripe支付Android端集成流程

上家公司想要拓展自己在新加坡的市场,打算做一个新加坡本地的生活服务应用,其中少不了的就是支付了。国外支付这块一直是个头疼的问题。想用Google Wallet吧,但它是采用NFC接触式交易,想要进行线上服务时没法进行,后来就去整个贝宝PayPal支付。在这里想吐槽一下,PayPal支付做起…

zencart1.55手把手教你开发stripe支付插件

第一步&#xff1a;在includes/modules/payment目录下创建名称为c_stripe的文件夹&#xff0c;用于存放stripe支付logo 第二步&#xff1a;在同includes/modules/payment目录下创建c_stripe.php文件&#xff0c;这个文件就是用于编写zencart支付插件,代码如下 <?php // /…

JAVA接入STRIPE支付教程(测试环境),STRIPE支付的调用以及STRIPE WEBHOOK回调

一、环境准备 1.注册 2.密钥 3.WEBHOOK回调 二、核心代码 1.配置API.key以及webhook.key 2.支付demo 3.WEBHOOK回调 一、环境准备 1.注册 STRIPE官网自行注册账号 2.两个重要的密钥 首先在STRIPE官网注册账号之后进入首页&#xff0c;点击API密钥&#xff0c;查看账号对应的…

前端对接stripe支付,创建测试session_is

第一次搞 stripe支付&#xff0c;国外的文档全英文 接stripe支付&#xff0c;根据官方文档&#xff0c;首先就是先跟服务端交互&#xff0c;创建session会话&#xff0c;获取id&#xff0c;当服务端不做这个功能时&#xff0c;就需要前端去掉stripe最底层的api&#xff0c;拿到…

Stripe支付简介和前端js调用

最近公司正在做一个国际版APP&#xff0c;涉及到海外支付&#xff0c;调研过Paypal、Skrill、BrainTree、Stripe&#xff08;可参考海外移动支付方案对比&#xff09;&#xff0c;最终 选择了Stripe支付。Stripe特点如下&#xff1a; 收费规则简单透明&#xff0c;手续费就是收…

laravel 对接stripe支付

参考文档 &#xff1a; stripe文档 stripe/stripe-php stripe api 文档 目录 一 获取关键参数二 安装Stripe库三 代码示例 一 获取关键参数 SCRIPE_SECRET_KEY &#xff08;调用api秘钥&#xff09; NOTIFY_SIGN (签名 支付回调使用) 二 安装Stripe库 # Install the PHP libr…

Stripe支付配置

开通支付 首先&#xff0c;你需要在 Stripe 官网开通你自己的支付账号信息&#xff1a; https://stripe.com/ 注册好以后&#xff0c;你即可获取 Stripe 的密钥信息&#xff1a; 密钥主要包含两部分&#xff0c;可发布的密钥 密钥 同时&#xff0c;你需要找到你交易的对应的货…