Сам себя перезагрузи
Есть одна небольшая проблема с моим роутером: при потере соединения с интернетом (со стороны провайдера) даже на небольшой промежуток времени, для подъема его приходится перезагружать. Т.е. заходить в панельку, вводить admin/pass, искать кнопочку “reboot”.
Наконец чисто из спортивного интереса пришла в голову мысль это все автоматизировать.

Просто сделать нужный POST запрос - это для слабаков (на самом деле роутер выпендиривался и ничего не принимал). Поэтому для решения данной задачи решил воспользоваться библиотекой Selenium WebDriver. Так как задача относится к разряду быстрофикс на коленке, то я использовал Python.
Для начала поставим библиотеку с помощью pip:
pip install selenium
В качестве драйвера будем использовать Chrome, который можно скачать тут.
Теперь приступим к коду:
import os from selenium import webdriver from selenium.webdriver.chrome.options import Options chrome_options = Options() chrome_options.add_argument("--headless") chrome_options.add_argument("--window-size=1920x1080") chrome_driver = os.getcwd() + "\\chromedriver.exe" driver = webdriver.Chrome(chrome_options=chrome_options, executable_path=chrome_driver)
Импортируем библиотеки, задаем нужные опции для драйвера. В папке с исполняемым скриптом складываем только что скачанный chromedriver.exe
.
Прежде чем попробовать зайти в панель управления роутером, нужно авторизоваться.

Авторизацию подобного типа можно пройти указывая данные прямо в ссылке, например: http://admin:pass@192.168.0.1/
.
Теперь попробуем заставить наш скрипт зайти в панель управления:
driver.get("http://admin:pass@192.168.0.1/") driver.get_screenshot_as_file("screenshot.png")
Последняя команда сохранит скриншот в папку с скриптом.
Теперь дело осталось за малым, надо заставить скрипт искать нужные кнопочки и дойти до меню с перезагрузкой. И тут мне пришлось повозиться. Вся страница состоит из фреймов, в которых selenium отказывался искать нужные мне кнопочки. Для того, чтобы его заставить, нужно переключить его на нужный фрейм:
# Кнопка System Tools в меню driver.switch_to_frame("bottomLeftFrame") button = driver.find_element_by_xpath("//a[text()='System Tools']") button.click()
Отлично, теперь скрипт добрался до такого состояния:
Дойдем теперь до страницы перезагрузки, найдем кнопку и кликнем по ней:
# Кнопка Reboot в открывшемся меню button = driver.find_element_by_xpath("//a[text()='- Reboot']") button.click() # Кнопка Reboot в открывшемся окне driver.switch_to_default_content() driver.switch_to_frame("mainFrame") button = driver.find_element_by_xpath("//input[@value='Reboot']") button.click()
Но для перезагрузки этого не достаточно.
Нам нужно подтвердить действие в таком вот диалоговом окне. Сделать это просто:
# Подтверждаем перезагрузку driver.switch_to_alert().accept()
Готово! Роутер перезапускается. Подключение к интернету восстановлено.
Mission complete
Полный код:
import os from selenium import webdriver from selenium.webdriver.chrome.options import Options chrome_options = Options() chrome_options.add_argument("--headless") chrome_options.add_argument("--window-size=1920x1080") chrome_driver = os.getcwd() + "\\chromedriver.exe" driver = webdriver.Chrome(chrome_options=chrome_options, executable_path=chrome_driver) driver.get("http://admin:pass@192.168.0.1/") # Кнопка System Tools в меню driver.switch_to_frame("bottomLeftFrame") button = driver.find_element_by_xpath("//a[text()='System Tools']") button.click() # Кнопка Reboot в открывшемся меню button = driver.find_element_by_xpath("//a[text()='- Reboot']") button.click() # Кнопка Reboot в открывшемся окне driver.switch_to_default_content() driver.switch_to_frame("mainFrame") button = driver.find_element_by_xpath("//input[@value='Reboot']") button.click() # Подтверждаем перезагрузку driver.switch_to_alert().accept()