Python-软件设计-“帮助”小孩子自我行为(电脑端看短视频)约束

目录

  • 前言
  • 一、方式一:网站访问拦截
  • 二、方式二:SW(电脑软件简称)启动拦截
  • 三、使用代码的方式将方式一和方式二结合成自动化程序部署
  • 四、其他拓展知识
    • 1.程序打包
    • 2、开机自启文件夹
  • 五、报错的解决方式
    • 1、打包成软件后,运行那个软件时不执行或报错
      • 问题一:'pyinstaller' 不是内部或外部命令,也不是可运行的程序或批处理文件。
      • 问题二:软件双击打开后没反应
    • 2、软件运行的问题
      • 问题一:运行软件就弹框报错
      • 问题二:任务管理器中没有看到这个软件在后台运行
  • 总结


前言

有个朋友是做教育机构类的工作,然后在某次聊天中他跟本人吐槽说现在的孩子用电脑就只会用来刷短视频和打游戏,上课时学生都被这些娱乐弄分神了,所以本人帮忙研究并制作了一点点小软件,“帮助”孩子控制住自己的行为。


一、方式一:网站访问拦截

这里的网站访问拦截呢,其实就是设置hosts文件,在本地禁止访问某个网站通常可以通过修改操作系统的 hosts 文件实现。hosts 文件可以让你将特定域名解析到指定的 IP 地址,从而实现对该域名的访问控制。

在 Windows 上:

1、打开记事本或其他文本编辑器,以管理员权限运行。
2、在记事本中,依次点击 “文件” -> “打开”,然后转到以下路径:
C:\Windows\System32\drivers\etc
3、在 “文件类型” 下拉菜单中选择 “所有文件”,然后选择 “hosts” 文件并点击 “打开”。
4、在 hosts 文件的末尾添加以下内容:
127.0.0.1 example.com
将 example.com 替换为你想要禁止访问的网站域名。
5. 保存并关闭 hosts 文件。

hosts文件

在 Linux 上:
1、打开终端。
2、输入以下命令以编辑 hosts 文件:
sudo nano /etc/hosts
3、在 hosts 文件的末尾添加以下内容:
127.0.0.1 example.com
将 example.com 替换为你想要禁止访问的网站域名。
4. 按下 Ctrl + X,然后输入 Y 来保存修改,最后按下 Enter 退出 nano 编辑器。

无论是在 Windows 还是 Linux 上,一旦你将特定域名解析到了 127.0.0.1,访问该域名时将会被重定向到本地主机,从而实现了对该网站的禁止访问。请注意,在修改 hosts 文件后,你可能需要清除浏览器缓存或者重启系统才能生效。


二、方式二:SW(电脑软件简称)启动拦截

简单来说,就是让程序一直检测电脑后台运行的软件,如果发现了想要管控的软件,就关闭它。

代码例如:

import psutil, time

def close_process(process_name):
    for proc in psutil.process_iter():
        if proc.name() == process_name:
            proc.kill()
            print(f"{process_name} 已成功关闭。")

while 1:
	# 调用函数来关闭指定的进程,比如关闭Chrome浏览器
	close_process("chrome.exe")
	time.sleep(0.1)	# 适当加点检测间隔时间,让CPU喘喘气

你看,就那么简单,那么简短的代码就能实现这个功能了,


三、使用代码的方式将方式一和方式二结合成自动化程序部署

这里的代码呢,是结合了很多偷懒的步骤的~~~

  1. 可以自动在各个盘里寻找存放该代码打包后的exe可执行程序,但仅限于盘外,比如D盘的外面;
  2. 篡改C:\Windows\System32\drivers\etc\的hosts文件内容,自动添加想要禁止访问的网站;
  3. 运行之后,自动将本身exe程序复制到开机自启文件夹里,这样电脑开机时就会自启该程序;
  4. 以上步骤执行完后,就会一直监测后台程序的启动,发现需要禁止的软件后,直接关闭,就会出现无论点击打开软件多少次,都没反应;
  5. 后续可以自行启用或修改记录软件运行、报错等信息,logging 库就可以实现,但本人没写完,也用不着;

程序打包的方法、开机文件夹的位置这两点内容写在代码的后面,有需要者直行查看哦!!!

各位即将干坏事的大爷们,代码如下(示例):
代码中需要自己加入正确的禁用网址和软件名才会成功哦!!!

'''
import time
import shutil
import os
import psutil

# import logging  # 用于记录文件

# 配置日志记录
# logging.basicConfig(filename='app.log', level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')

# 记录日志信息

# logging.warning('This is a warning message.')
# logging.error('This is an error message.')

"""--------------------以下为拦截抖*等短视频网站的代码-------------------------"""

file_path = 'C:\\Windows\\System32\\drivers\\etc\\hosts'

# 写入的内容  自行修改想要本地禁用的网站
content_to_add1 = "127.0.0.1 www.***yin.com"
content_to_add2 = "127.0.0.1 www.****shou.com"
content_to_add3 = "127.0.0.1 ***kan.baidu.com"
content_to_add4 = "127.0.0.1 www.****bili.com"


def open_hosts(content_to_add):
    # 写入新内容
    with open(file_path, 'a') as file1:
        file1.write('\n' + content_to_add)
    print("已添加内容到文件末尾。")


hosts_path = file_path  # hosts 文件路径,根据操作系统可能会有所不同

# 检查 hosts 文件是否存在
if not os.path.exists(hosts_path):
    # 如果不存在,则创建文件
    with open(hosts_path, 'w') as file:
        # 写入默认内容或者你需要的内容
        file.write(content_to_add1 + "\n")
        file.write(content_to_add2 + "\n")
        file.write(content_to_add3 + "\n")
        file.write(content_to_add4 + "\n")
    print("\n创建hosts文件成功,并且已经写入数据!\n")
else:
    print("hosts文件已存在,开始进行下一步操作:添加内容")

    # 读取文件内容
    with open(file_path, 'r') as file:
        file_content = file.read()

    # 检查是否存在想要添加的内容
    if content_to_add1 not in file_content:
        open_hosts(content_to_add1)  # 写入新内容
    else:
        print("文件已存在相同内容,无需添加。")
    if content_to_add2 not in file_content:
        open_hosts(content_to_add2)  # 写入新内容
    else:
        print("文件已存在相同内容,无需添加。")
    if content_to_add3 not in file_content:
        open_hosts(content_to_add3)  # 写入新内容
    else:
        print("文件已存在相同内容,无需添加。")
    if content_to_add4 not in file_content:
        open_hosts(content_to_add4)  # 写入新内容
    else:
        print("文件已存在相同内容,无需添加。")

for t in range(5):
    print("程序运行倒计时————", 5 - t)
    time.sleep(1)
"""--------------------以下为拦截抖音软件的代码-------------------------"""

# 获取当前执行脚本的路径和文件名
file_path = os.path.abspath(__file__)  # 获取绝对路径
directory = os.path.dirname(file_path)  # 获取路径部分
file_name = os.path.basename(file_path)  # 获取文件名部分

print("程序绝对路径:", file_path, file_path.replace('.py', '.exe'))
print("程序路径:", directory)
print("程序文件名:", file_name, file_name.replace('.py', '.exe'))
k = 0
z = r"C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup"

D = "D:\\" + file_name.replace('.py', '.exe')
E = "E:\\" + file_name.replace('.py', '.exe')
F = "F:\\" + file_name.replace('.py', '.exe')
G = "G:\\" + file_name.replace('.py', '.exe')
H = "H:\\" + file_name.replace('.py', '.exe')

# 调用函数复制exe文件到指定路径
source_path = file_path.replace('.py', '.exe')  # 源文件路径
destination_path = z + '\\' + file_name.replace('.py', '.exe')  # 目标路径
print("destination_path:", destination_path)

app_list = ["***yin.exe", "西瓜**.exe", "**哔哩.exe"]

def close_process(process_name):
    """
    检测运行的程序中是否有指定的软件启动
    :param process_name:
    :return:
    """
    global k
    for proc in psutil.process_iter():
        # print("输出软件名字:", proc.name())
        # logging.info("输出软件名字:", proc.name())
        if proc.name() == process_name:
            proc.kill()
            k = 1
            print(f"{process_name} 已成功关闭。")
            # logging.info(f"{process_name} 已成功关闭。")
        else:
            print("想要关闭的软件还没有出现...等待中...")
            # logging.info("想要关闭的软件还没有出现...等待中...")


def start_chloe_douyin():
    """
    调用函数来关闭指定的进程,比如关闭***yin
    :return:
    """
    while 1:
        try:
            for i in app_list:      # 遍历列表中需要关闭的软件名
                close_process(i)
                time.sleep(1)
        except Exception as ex:
            print(ex)
            # logging.error(ex)

        if k == 2:
            break


def ssss(source_path, destination_path):
    """
    执行复制程序
    :param source_path: 源文件路径
    :param destination_path: 目标文件路径
    :return:
    """
    print("源文件存在......", source_path)
    if not os.path.exists(destination_path):
        print("目标路径中还没有源文件")
        # 复制文件到目标路径
        shutil.copy(source_path, destination_path)
        print("文件复制成功")
    else:
        print("目标路径中有源文件了...")


def copy_exe(source_path, destination_path):
    """
    复制exe文件到指定的路径下
    :param source_path:源文件路径
    :param destination_path:目标文件路径
    :return:
    """
    try:
        # 检查源文件是否存在
        if not os.path.exists(D):
            print("D盘路径的源文件不存在", D)
        else:
            ssss(D, destination_path)  # 执行复制软件的程序
        if not os.path.exists(E):
            print("E盘路径的源文件不存在", E)
        else:
            ssss(E, destination_path)  # 执行复制软件的程序
        if not os.path.exists(F):
            print("F盘路径的源文件不存在", F)
        else:
            ssss(F, destination_path)  # 执行复制软件的程序
        if not os.path.exists(G):
            print("G盘路径的源文件不存在", G)
        else:
            ssss(G, destination_path)  # 执行复制软件的程序
        if not os.path.exists(H):
            print("H盘路径的源文件不存在", H)
        else:
            ssss(H, destination_path)  # 执行复制软件的程序

        if not os.path.exists(source_path):
            print("该程序目前路径的源文件不存在", source_path)
            OO = "不存在"
            # return
        else:
            # source_path = OO  # 将最终的源文件路径替换给真正的目标路径变量
            ssss(source_path, destination_path)  # 执行复制软件的程序
        print("开始针对关闭", app_list, "软件......")
        start_chloe_douyin()  # 开始针对关闭抖音软件

    except Exception as e:
        print(f"复制文件时发生错误:{e}")


copy_exe(source_path, destination_path)  # 执行复制与启动程序

四、其他拓展知识

1.程序打包

首先,上面的代码要进行打包。

以下是使用PyInstaller来打包Python程序的简单步骤:

1.安装PyInstaller:首先,确保你已经安装了PyInstaller。你可以使用pip来安装PyInstaller:

pip install pyinstaller

2.进入项目目录:在命令行中,导航到包含你的Python脚本的项目目录。

3.运行PyInstaller:运行以下命令来打包你的Python程序:

pyinstaller your_script.py

其中 your_script.py 是你要打包的Python脚本的文件名。
一般本人习惯用 -w -F 来打包

pyinstaller -w -F your_script.py

4.等待打包完成:PyInstaller会将你的Python脚本及其依赖项打包成一个或多个文件夹,并生成可执行文件。打包完成后,你会在项目目录中看到一个名为 dist 的新文件夹,里面包含了打包后的文件。

5.运行可执行文件:在 dist 文件夹中找到生成的可执行文件,双击运行它即可。如果你的程序有任何输入或输出,你应该能够在命令行或程序窗口中看到相应的信息。

2、开机自启文件夹

按住win键 + R,弹出运行框后,输入:

shell:startup

在这里插入图片描述
点击“确定”之后就会弹出那个开机自启的文件夹了


五、报错的解决方式

1、打包成软件后,运行那个软件时不执行或报错

大概会有这么几种问题:

问题一:‘pyinstaller’ 不是内部或外部命令,也不是可运行的程序或批处理文件。

很大一种可能,就是用的是Windows命令行运行的打包程序,但是呢,这里命令行里没有运行安装过pyinstaller,所以会说没有这个库,安装了就可以打包了。


问题二:软件双击打开后没反应

很大的可能就是代码写的有问题,报错了,就得根据报错提示来找问题了,直接是看不到打印的信息的,得把那个exe文件拖到命令行那个窗口去运行,就会出现报错的信息。
在这里插入图片描述


2、软件运行的问题

问题一:运行软件就弹框报错

已经打包好了,运行软件时,出现以下错误:
在这里插入图片描述
这是篡改hosts文件内容时出的错,原因是软件的权限不够,需要管理员权限。

解决方式:使用管理员身份运行该软件
在这里插入图片描述


问题二:任务管理器中没有看到这个软件在后台运行

软件双击运行后,没有报错,“开机自启”文件夹中也有Close_TikTok5.exe软件了,就是在任务管理器中没有找到这个Close_TikTok5.exe软件,最好的解决方法就是重启电脑,只要“开机自启”文件夹中也有Close_TikTok5.exe软件,90%的几率是可以成功部署的。

这里就是手动复制软件到开机自启文件夹中,然后就都解决了

总结

如果软件启动没问题,能在任务管理器中找得到这个软件的名字,那就是成功的,只是在复制和篡改hosts时有问题,按照上面的解决方式解决之后应该就没啥问题了。

再不行的话把可以正常运行的软件手动复制到开机自启文件夹中,然后也手动去篡改hosts文件的内容,这样就可以了。

最后可以测试一下部署是否有用,网站上访问短视频网站时出现以下的图片情况就说明成功拦截了
在这里插入图片描述
然后拦截软件部分就得从任务管理器中查找想要禁用的软件名是什么,记得要后面加上.exe哦,比如donyin.exe。这些拦截软件启动的得在写代码的时候一个个试,试成功了再打包,再部署,部署后还要打开开机自启文件夹去检查一遍有没有那个软件。

该文章若对你有帮助,不妨点个赞噢~


2024.04.28写
有写得不好、写得不对的地方还请各位指出,谢谢!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/581170.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【论文阅读】ViTAE:Vision transformer advanced by exploring intrinsic inductive bias

ViTAE:Vision transformer advanced by exploring intrinsic inductive bias 论文地址摘要:简介:3 方法论3.1 重温视觉变压器3.2 ViTAE3.3 缩减单元3.4 Normal cell3.5 模型细节 4 训练4.1 Implementation details4.2 Comparison with the state-of-the-…

Linxu系统服务管理,systemd知识/进程优先级/平均负载/php进程CPU100%怎么解决系列知识!

shell脚本(命令)放后台 sleep 300& 放到后台运行,脚本或命令要全路径 nohup:用户推出系统进程继续工作 【功能说明】 nohup 命令可以将程序以忽略挂起信号的方式运行起来,被运行程序的输出信息将不会显示到终端 如…

华为鸿蒙应用--封装通用标题栏:CommonTitleBar(鸿蒙工具)-ArkTs

0、效果图 自定义通用标题栏 支持左、中、右常规标题栏设置; 支持自定义视图; 支持搜索功能 一、CommTitleBar代码 import router from ohos.router; import { Constants } from ../../constants/Constants; import { StyleConstants } from ../../…

PostgreSQL 把多余字段转JSON

核心SQL: json_agg(json_build_object(kgrq, a.kgrq, jgrq, a.jgrq, sgdd, a.sgdd))

理解与使用Linux设备树编译器(DTC)

这里写目录标题 设备树简介设备树编译器(DTC)安装DTC使用DTC实例:编辑设备树小结参考资料 Linux设备树编译器(DTC)是一个关键工具,用于处理嵌入式Linux系统中的设备树文件。本文将介绍设备树的概念、DTC的基…

基于Docker + Locust的数据持久化性能测试系统

前几天给大家分享了如何使用Locust进行性能测试,但是在实际使用中会发现存在压测的结果无法保存的问题,比如在分布式部署情况下进行压测,每轮压测完成需要释放资源删除容器重新部署后,这段时间的压测结果就都丢失了,如…

一文讲解Android车载系统camera架构 - EVS

Android的camera开发中,使用最多的是camera2 以及现在Google主推的cameraX 架构,而这两个架构主要针对的是手机移动端上camera的流程。 而今天介绍的EVS(Exterior View System)架构是不同于camera2上的手机架构,针对Automotive的版本&#x…

【源码阅读】 Golang中的database/sql库源码探究

Note:文章待完结 文章目录 前言一、整体目录结构二、driver包1、驱动相关driver.Driver2、驱动连接:driver.Conn3、预处理结构:Stmt4、执行结果 driver.Result5、查询结果:driver.Rows6、driver.RowsAffected7、driver.Value8、Va…

vue-quill-editor富文本插件控制字数显示

最终效果 富文本编辑框&#xff0c;只统计内容&#xff0c;不包含标签以及样式&#xff0c;超出最大字数限制提示。 具体代码 html <div class"relative"><quillEditorv-model"form.nutriSuggestion"ref"myQuillEditor7":options&quo…

03-JAVA设计模式-策略模式

策略模式 什么是策略模式 策略模式&#xff08;Strategy Pattern&#xff09;是行为设计模式之一&#xff0c;它使你能在运行时改变对象的行为。在策略模式中&#xff0c;一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为模式。 在策略模式中&#xff0c;…

uniapp微信小程序开发踩坑日记:由于图表数据渲染不出来,我第一次在项目中用watch函数监听数据变化

一、发现问题 在我们团队自己开发的微信小程序中&#xff0c;引入了Echarts图表库 然后突然有一天&#xff0c;后端队友反应图表渲染有问题。后面我去试了一下&#xff0c;确实20次里面必有一次数据渲染不出来 断定代码没问题&#xff0c;于是我们将其鉴定为玄学 二、问题原因…

【GitHub】主页简历优化

【github主页】优化简历 写在最前面一、新建秘密仓库二、插件卡片配置1、仓库状态统计2、Most used languages&#xff08;GitHub 常用语言统计&#xff09;使用细则 3、Visitor Badge&#xff08;GitHub 访客徽章&#xff09;4、社交统计5、打字特效6、省略展示小猫 &#x1f…

UDP和TCP(传输层)

这里写目录标题 UDPUDP的基本特点UDP协议报文格式 TCPTCP协议报文格式TCP特点可靠传输实现机制确认应答超时重传数据丢了应答报文丢了 小结 UDP UDP的基本特点 无连接不可靠传输面向数据报全双工 UDP协议报文格式 2个字节有效范围(无符号): 0 ~ 65535(2^16 - 1). 2个字节有效范…

用数据检验函数正确性,matlab2C

数据存取格式 filename1 g.txt; fid1 fopen(filename1,w); for i 1 : length(g)for j1:size(g,2)if(j1)fprintf(fid1,{%.16f,,g(i,j)); elseif(j>1&&j<151)fprintf(fid1,%.16f,,g(i,j)); elsefprintf(fid1,%.16f},\n,g(i,j));endend%fprintf(fid1,\n…

如何用Python语言实现远程控制4路控制器/断路器

如何用Python语言实现远程控制4路控制器/断路器呢&#xff1f; 本文描述了使用Python语言调用HTTP接口&#xff0c;实现控制4路控制器/断路器&#xff0c;支持4路输出&#xff0c;均可独立控制&#xff0c;可接入各种电器。 可选用产品&#xff1a;可根据实际场景需求&#xf…

Spring Web MVC入门(3)——响应

目录 一、返回静态页面 RestController 和 Controller之间的关联和区别 二、返回数据ResponseBody ResponseBody作用在类和方法的情况 三、返回HTML代码片段 响应中的Content-Type常见的取值&#xff1a; 四、返回JSON 五、设置状态码 六、设置Header 1、设置Content…

2024李卜常识开天斧

2024年&#xff0c;李卜常识开天斧课程以其独特的魅力吸引了众多学子。这门课程如同开天辟地的神斧&#xff0c;帮助我们打开常识知识的大门&#xff0c;引领我们走进一个全新的学习世界。在李卜老师的悉心指导下&#xff0c;我们逐渐掌握了各种常识知识&#xff0c;拓宽了视野…

leaftjs+turfjs+idw纯前端实现等值面绘图+九段线

最近有个绘制等值面图的需求。我们一般的实现路径是&#xff1a; 1.后台绘图&#xff0c;用surfer绘制好&#xff0c;给前端调用叠加到地图。 2.后台用python绘图&#xff0c;绘制好给前端调用&#xff0c;叠加到地图。 3.后台进行插值计算、地图裁剪、最终生成geojson文件或…

VS2019配合QT5.9开发IRayAT430相机SDK

环境配置 VS2019 QT5.9 编译器版本 MSVC2017_64添加系统环境变量&#xff08;完毕后重启电脑&#xff09; 从VS2019中下载Qt插件 从VS2019中添加单个编译组件 上述操作完成后用VS打开工程文件&#xff0c;工程文件地址 &#xff1a; C:\Users\86173\Desktop\IRCNETSDK_W…

初识 Linux

一、基础命令 0、 ls cd cat pwd 当前工作目录 find -name 测试.py 查找文件 grep "学院" 测试.py 查找字符串 "学院" 在文件 测试.py 中位置&#xff0c;输出所在的 行 1、重定向器 echo "Hello Kali Linux!" > Hello 创建 文件 Hel…