这个实验室安全考试需要学习10小时,纯粹的浪费时间,但是挂机每5分钟就会跳出对话框然后时间停止,十分恶心,所以制作了一个Python挂机脚本,每隔20秒刷新一次网页,规避时间累积到5分钟跳出对话框,此外,在运行该脚本的时候将阻止电脑熄屏,以免出现bug。
使用方法:运行Python代码,在跳出的浏览器中的网页中输入自己的学号和密码,然后随便点一个学习界面就可以持续挂机了。
前置要求:在命令提示符中输入
pip install selenium webdriver-manager
python运行
,安装selenium库
- import datetime
- from time import sleep
- from selenium import webdriver
- from selenium.webdriver.edge.options import Options
- from selenium.webdriver.edge.service import Service
- from selenium.webdriver.common.by import By
- from selenium.webdriver.support.ui import WebDriverWait
- from selenium.webdriver.support import expected_conditions as EC
- from webdriver_manager.microsoft import EdgeChromiumDriverManager
- import ctypes
- import threading
-
- # Windows API常量
- ES_CONTINUOUS = 0x80000000
- ES_SYSTEM_REQUIRED = 0x00000001
- ES_DISPLAY_REQUIRED = 0x00000002
-
- def prevent_screen_off():
- """防止屏幕关闭的函数"""
- while True:
- # 调用Windows API来防止系统休眠和屏幕关闭
- ctypes.windll.kernel32.SetThreadExecutionState(
- ES_CONTINUOUS | ES_SYSTEM_REQUIRED | ES_DISPLAY_REQUIRED
- )
- sleep(30) # 每30秒执行一次
-
- def auto_refresh():
- # 目标URL
- url = "https://examsafety.nuist.edu.cn/index.php"
-
- # 设置Edge选项
- edge_options = Options()
- edge_options.add_argument('--ignore-certificate-errors')
- edge_options.add_argument('--ignore-ssl-errors')
-
- # 计数器
- refresh_count = 0
-
- try:
- # 启动防止屏幕关闭的线程
- prevent_screen_thread = threading.Thread(target=prevent_screen_off, daemon=True)
- prevent_screen_thread.start()
- print("已启动防止屏幕关闭功能")
-
- # 创建Edge浏览器实例
- print("正在启动Edge浏览器...")
- driver = webdriver.Edge(
- service=Service(EdgeChromiumDriverManager().install()),
- options=edge_options
- )
-
- # 最大化窗口(可选)
- driver.maximize_window()
-
- # 打开页面
- print("正在打开网页...")
- driver.get(url)
-
- print("开始自动刷新页面...")
- while True:
- try:
- # 获取当前时间
- current_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
-
- # 等待20秒
- sleep(20)
-
- # 刷新页面
- driver.refresh()
-
- # 等待页面加载完成
- WebDriverWait(driver, 10).until(
- EC.presence_of_element_located((By.TAG_NAME, "body"))
- )
-
- refresh_count += 1
- print(f"[{current_time}] 第{refresh_count}次刷新成功")
-
- except Exception as e:
- print(f"[{current_time}] 刷新出错: {e}")
- print("5秒后重试...")
- sleep(5)
-
- except KeyboardInterrupt:
- print(f"\n程序已停止,共成功刷新 {refresh_count} 次")
-
- finally:
- # 恢复系统默认的电源管理设置
- ctypes.windll.kernel32.SetThreadExecutionState(ES_CONTINUOUS)
- try:
- input("\n按回车键关闭浏览器...")
- driver.quit()
- except:
- pass
-
- if __name__ == "__main__":
- print("程序启动,按Ctrl+C停止")
- print("-------------------")
- auto_refresh()
python运行