📜  Python网站拦截器|构建Python脚本

📅  最后修改于: 2020-10-27 02:08:24             🧑  作者: Mango

构建Python脚本

让我们开始构建可以在系统启动时运行的Python脚本,以阻止对特定网站的访问。打开PyCharm以编辑代码,也可以使用所需的任何IDE。

创建一个名为web-blocker.py的新Python脚本。为了使您可以理解该过程,我们将逐步构建此脚本。因此,让我们开始通过设置所有必需的变量进行编码。

设置变量

此步骤将初始化脚本中将使用的所有必需变量。在这里,host_path设置为hosts文件的路径。在我们的例子中,它位于/ etc下。在Python,r用于表示原始字符串。

重定向已分配给本地主机地址,即127.0.0.1。网站是一个列表,其中包含要阻止的网站列表。

host_path = r"/etc/hosts"
redirect = "127.0.0.1"
websites = ["www.facebook.com", "https://www.facebook.com"]

设置无限循环

我们需要在Python脚本中有一个while循环,以确保我们的脚本每5秒运行一次。

为了做到这一点,我们将使用时间模块的sleep()方法。

import time

host_path = r"/etc/hosts"
redirect = "127.0.0.1"
websites = ["www.facebook.com", "https://www.facebook.com"]

while True:
    time.sleep(5)

确定时间

在构建所需的Python脚本的过程中,我们需要检查当前时间是工作时间还是娱乐时间,因为该应用程序将在工作时间阻止网站访问。

要检查当前时间,我们将使用datetime模块。我们将检查datetime.now()是否大于当前日期上午9点的datetime对象,并且小于当前日期下午5点的datetime对象。

让我们进一步讨论datetime.now()的输出。

它返回一个日期时间对象,其中包含当前时间,包括年(2019),月(1月1日),日期(23rd),时间(小时,分钟,秒)。我们可以比较该值,并使用if语句检查该值是否存在于当前日期的上午9点和当前日期的下午5点之间。

该脚本现在将包含以下代码。

from time import *
from datetime import *

host_path = r"/etc/hosts"
redirect = "127.0.0.1"
websites = ["www.facebook.com", "https://www.facebook.com"]

while True:
    if datetime(datetime.now().year,datetime.now().month,datetime.now().day,9)< datetime.now()< datetime(datetime.now().year,datetime.now().month,datetime.now().day,17):
        print("Working hours")

    else:
        print("Fun hours")
    sleep(5)

写入主机文件

该脚本的主要目的是保持定期修改主机文件。为了让脚本配置主机文件,我们需要在此处实现文件处理方法。

以下代码已添加到主机文件。

with open(host_path,"r+") as fileptr:
            content = fileptr.read()
            for website in websites:
                if website in content:
                    pass
                else:
                    fileptr.write(redirect+"
                    "+website+"\n")

open()方法以r +模式打开存储为host_path的文件。首先,我们使用read()方法读取文件的所有内容,并将其存储到名为content的变量中。

for循环遍历网站列表(一个或多个网站),我们将检查列表中的每个项目是否已经存在于内容中。

如果主机文件中存在内容,则必须通过。否则,我们必须将重定向网站映射写入hosts文件,以便将网站主机名重定向到localhost。

主机文件现在将包含以下Python代码。

from time import *
from datetime import *
host_path = r"/etc/hosts"
redirect = "127.0.0.1"
websites = ["www.facebook.com", "https://www.facebook.com"]
while True:
    if datetime(datetime.now().year,datetime.now().month,datetime.now().day,9)

现在,让我们运行此Python脚本,并检查它是否已修改了hosts文件。

如我们所见,它像在工作时间一样,始终在控制台上打印工作时间。现在,让我们检查hosts文件的内容。

如我们所见,这两行已添加到hosts文件。它将把Facebook的访问重定向到本地主机。

从主机文件中删除

我们的脚本在工作时间内工作正常,现在可以在娱乐时间添加一些功能。在娱乐时间(不是工作时间),我们必须从主机文件中删除添加的行,以便授予对被阻止网站的访问权限。

将以下代码添加到脚本的else部分(有趣的情况)。

with open(host_path,'r+') as file:
    content = file.readlines();
    file.seek(0)
    for line in content:
        if not any(website in line for website in        websites):
            file.write(line)
    file.truncate()
print("fun hours")

else部分将在娱乐时间执行,并删除所有阻止访问计算机上某些特定网站的映射。

让我们在娱乐时间检查Python脚本执行时的hosts文件内容。

最后的剧本

现在,我们有了一个运行良好的Python脚本,以阻止在工作时间(上午9点至下午5点)访问某些特定的网站,并在娱乐时间提供访问权限。

脚本web-blocker.py在下面给出。

web-blocker.py

from time import *
from datetime import *

host_path = r"/etc/hosts"
redirect = "127.0.0.1"
websites = ["www.facebook.com", "https://www.facebook.com"]

while True:
    if datetime(datetime.now().year,datetime.now().month,datetime.now().day,9)