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


前言

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


已上传的软件下载链接在此~~~行为约束软件下载

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

这里的网站访问拦截呢,其实就是设置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写
有写得不好、写得不对的地方还请各位指出,谢谢!


2024.05.07添加下载链接内容

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值