WIFIConnect/wificonnect.py

148 lines
3.7 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import subprocess
import time
import os
import sys
from datetime import datetime, time as dtime
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)
# 参数配置
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)
options = Options()
options.add_argument("--headless")
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
def is_network_ok():
"""判断网络是否可用"""
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
def perform_login():
"""执行自动认证流程"""
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("已输入账号密码")
login_btn = wait.until(
EC.element_to_be_clickable((By.ID, "login-account"))
)
login_btn.click()
log("已点击登录")
success_confirm = wait.until(
EC.element_to_be_clickable((By.CLASS_NAME, "btn-confirm"))
)
success_confirm.click()
log("代拨成功")
time.sleep(3)
except Exception as e:
log(f"登录过程中出现异常: {e}")
finally:
if driver:
driver.quit()
def main():
disconnect_time = 0
try:
while True:
# 判断是否在运行时间段
if not is_in_runtime():
log("当前不在运行时间段,程序休眠")
time.sleep(60)
continue
if is_network_ok():
disconnect_time = 0
log("网络正常")
else:
disconnect_time += CHECK_INTERVAL
log(f"网络中断 {disconnect_time}")
if disconnect_time >= DISCONNECT_THRESHOLD:
log("断网超时,自动认证...")
perform_login()
disconnect_time = 0
time.sleep(CHECK_INTERVAL)
except KeyboardInterrupt:
log("用户终止程序,退出中...")
if __name__ == "__main__":
main()