如何为基于hosts的Youtube Blocker添加datetime定时解封功能
实现方案
完全可以通过datetime模块实现定时解封需求,以下是具体修改方法:
核心逻辑说明
我们仅需要读取当前时间的小时数,与你预设的解封时间阈值对比即可,示例中设定每日21点后自动解封,你可以根据需求调整阈值:
- 当日0:00 ~ 20:59:执行Youtube屏蔽逻辑
- 当日21:00 ~ 23:59:执行Youtube解封逻辑
修改后可运行代码
# 使用任务计划程序实现开机自动运行 import datetime # 配置项:可根据需求自行修改 sites_to_block = ["www.youtube.com", "youtube.com"] # 建议加上不带www的域名,避免遗漏 hosts_path = r"C:\Windows\System32\drivers\etc\hosts" redirect = "127.0.0.1" BLOCK_END_HOUR = 21 # 每日解封时间(24小时制) def block_or_unblock(): current_hour = datetime.datetime.now().hour if current_hour < BLOCK_END_HOUR: print("执行站点屏蔽") with open(hosts_path , 'r+', encoding='utf-8') as hostsfile: hosts_content = hostsfile.read() for site in sites_to_block: if site not in hosts_content: hostsfile.write(f"{redirect} {site}\n") else: print('执行站点解封') with open(hosts_path,'r+', encoding='utf-8') as hostsfile: lines = hostsfile.readlines() hostsfile.seek(0) for line in lines: if not any(site in line for site in sites_to_block): hostsfile.write(line) hostsfile.truncate() if __name__ == "__main__": # 注意:运行该脚本需要管理员权限,否则无法修改hosts文件 block_or_unblock()
运行注意事项
- 修改Windows系统hosts文件需要管理员权限,你在任务计划程序中配置该脚本时,需要勾选「使用最高权限运行」选项,否则脚本会执行失败
- 现有代码单次运行即可根据当前时间执行对应操作,如果需要到点自动切换状态,有两种可选方案:
- 方案1:在代码中加入无限循环,每隔5~10分钟执行一次时间判断和对应操作,让脚本常驻后台运行
- 方案2:无需修改代码,直接在任务计划程序中新增触发器,设置脚本每间隔1小时重复运行一次即可
- 更简化的替代方案:你可以完全不用写时间判断逻辑,直接拆分两个独立脚本,分别对应屏蔽和解封操作,然后在任务计划程序中设置两个定时任务:每日0点运行屏蔽脚本,每日21点运行解封脚本,稳定性更高,不需要Python后台驻留。
内容的提问来源于stack exchange,提问作者Hrishi
相关产品推荐
相关产品推荐

