import time
import logging
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import NoSuchElementException, TimeoutException
from webdriver_manager.chrome import ChromeDriverManager
# === Configuration ===
ROUTER_IP = '192.168.0.1'
PASSWORD = '********'
CYCLE_INTERVAL_SECONDS = 15 * 60 # 15 minutes
# === Logging Setup ===
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s [%(levelname)s] %(message)s',
handlers=[
logging.FileHandler("router_reconnect.log"),
logging.StreamHandler()
]
)
# === Selenium Setup ===
options = Options()
options.add_argument('--headless') # Comment this out to see the browser
options.add_argument('--disable-gpu')
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=options)
def login():
logging.info("Attempting login...")
driver.get(f"http://{ROUTER_IP}")
time.sleep(2)
try:
password_input = driver.find_element(By.ID, 'txtPwd')
password_input.clear()
password_input.send_keys(PASSWORD)
logging.info("Entered password.")
login_button = driver.find_element(By.ID, 'btnLogin')
login_button.click()
logging.info("Clicked login button.")
time.sleep(5)
driver.execute_script("""
function ftb() {
$(".color_background_blue").css("background-color","#456");
$(".headcontainer").hide();
$("body").prepend('<a style="font-weight:bolder;background-color: #448;color:white;padding: 10px;border-radius:10px;" onclick="ltebandselection()">SET</a>');
}
ftb();
""")
WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.XPATH, "//a[text()='SET']"))
)
logging.info("Login complete. Band lock UI is ready.")
set_button = driver.find_element(By.XPATH, "//a[text()='SET']")
set_button.click()
logging.info("Band lock function triggered.")
except (NoSuchElementException, TimeoutException) as e:
logging.error(f"Login error: {e}")
def execute_band_lock(bands):
logging.info(f"Executing band lock for bands: {bands}")
try:
driver.execute_script(f"""
function err(e, a, n) {{
console.log("Band lock error:", e, a, n);
}}
var selectedBands = "{bands}";
var a = selectedBands.split("+"), n = 0;
for (var l = 0; l < a.length; l++) {{
n += Math.pow(2, parseInt(a[l]) - 1);
}}
var hexBand = "0x" + n.toString(16);
$.ajax({{
type: "GET",
url: "/goform/goform_get_cmd_process",
data: {{ cmd: "wa_inner_version,cr_version,RD", multi_data: "1" }},
dataType: "json",
success: function(e) {{
var ad = hex_md5(hex_md5(e.wa_inner_version + e.cr_version) + e.RD);
$.ajax({{
type: "POST",
url: "/goform/goform_set_cmd_process",
data: {{
isTest: "false",
goformId: "SET_LTE_BAND_LOCK",
lte_band_lock: hexBand,
AD: ad
}},
success: function() {{
console.log("Band lock applied.");
}},
error: err
}});
}}
}});
""")
logging.info(f"Band lock for {bands} applied.")
except Exception as e:
logging.error(f"Error applying band lock for {bands}: {e}")
def main():
try:
login()
execute_band_lock("3")
logging.info("Band 3 lock applied. Holding for 5 seconds...")
time.sleep(5)
execute_band_lock("1+3")
logging.info("Band 1+3 lock applied. Holding for 895 seconds...")
time.sleep(895)
except Exception as e:
logging.exception(f"Unexpected error in main: {e}")
if __name__ == "__main__":
while True:
main()
logging.info("Cycle complete...")