WIFIConnect/wificonnect.py

148 lines
3.7 KiB
Python
Raw Normal View History

2026-01-17 17:36:43 +08:00
import subprocess
import time
import os
import sys
from datetime import datetime, time as dtime
2026-01-17 17:36:43 +08:00
from selenium import webdriver
from selenium.webdriver.edge.service import Service
from selenium.webdriver.edge.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.edge.service import Service
# 获取当前 exe 所在目录
BASE_DIR = getattr(sys, '_MEIPASS', os.path.dirname(os.path.abspath(__file__)))
driver_path = os.path.join(BASE_DIR, "edge", "msedgedriver.exe")
service = Service(driver_path)
2026-01-17 17:36:43 +08:00
# 参数配置
PING_HOST = "www.baidu.com"
USERNAME = "hzxhc60125893"
PASSWORD = "125893"
CHECK_INTERVAL = 60
DISCONNECT_THRESHOLD = 300
# 运行时间段6:30 到 0:30
START_TIME = dtime(6, 30)
END_TIME = dtime(0, 30)
2026-01-17 17:36:43 +08:00
options = Options()
options.add_argument("--headless")
2026-01-17 17:36:43 +08:00
options.add_argument("--disable-gpu")
options.add_argument("--no-sandbox")
options.add_argument("--disable-blink-features=AutomationControlled")
service = Service("edge/msedgedriver.exe")
def log(msg):
"""带时间戳日志"""
now = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
print(f"[{now}] {msg}")
def is_in_runtime():
"""判断当前时间是否在运行时间段"""
now = datetime.now().time()
# 跨天时间段处理
if START_TIME <= END_TIME:
return START_TIME <= now <= END_TIME
else:
return now >= START_TIME or now <= END_TIME
2026-01-17 17:36:43 +08:00
def is_network_ok():
"""判断网络是否可用"""
2026-01-17 17:36:43 +08:00
try:
result = subprocess.run(
["ping", "-n" if subprocess.os.name == "nt" else "-c", "1", PING_HOST],
stdout=subprocess.DEVNULL,
stderr=subprocess.DEVNULL
)
return result.returncode == 0
except:
return False
2026-01-17 17:36:43 +08:00
def perform_login():
"""执行自动认证流程"""
2026-01-17 17:36:43 +08:00
driver = None
try:
driver = webdriver.Edge(service=service, options=options)
wait = WebDriverWait(driver, 30)
driver.get("http://10.33.0.2")
username_input = wait.until(
EC.presence_of_element_located((By.ID, "username"))
)
username_input.clear()
username_input.send_keys(USERNAME)
password_input = driver.find_element(By.ID, "password")
password_input.clear()
password_input.send_keys(PASSWORD)
log("已输入账号密码")
2026-01-17 17:36:43 +08:00
login_btn = wait.until(
EC.element_to_be_clickable((By.ID, "login-account"))
)
login_btn.click()
log("已点击登录")
2026-01-17 17:36:43 +08:00
success_confirm = wait.until(
EC.element_to_be_clickable((By.CLASS_NAME, "btn-confirm"))
)
success_confirm.click()
log("代拨成功")
2026-01-17 17:36:43 +08:00
time.sleep(3)
except Exception as e:
log(f"登录过程中出现异常: {e}")
2026-01-17 17:36:43 +08:00
finally:
if driver:
driver.quit()
2026-01-17 17:36:43 +08:00
def main():
disconnect_time = 0
try:
while True:
# 判断是否在运行时间段
if not is_in_runtime():
log("当前不在运行时间段,程序休眠")
time.sleep(60)
continue
2026-01-17 17:36:43 +08:00
if is_network_ok():
disconnect_time = 0
log("网络正常")
2026-01-17 17:36:43 +08:00
else:
disconnect_time += CHECK_INTERVAL
log(f"网络中断 {disconnect_time}")
2026-01-17 17:36:43 +08:00
if disconnect_time >= DISCONNECT_THRESHOLD:
log("断网超时,自动认证...")
2026-01-17 17:36:43 +08:00
perform_login()
disconnect_time = 0
2026-01-17 17:36:43 +08:00
time.sleep(CHECK_INTERVAL)
2026-01-17 17:36:43 +08:00
except KeyboardInterrupt:
log("用户终止程序,退出中...")
2026-01-17 17:36:43 +08:00
if __name__ == "__main__":
main()