Last active
January 31, 2021 13:19
-
-
Save themaximax/8c5689c890e3738ee31ec22c04f7058b to your computer and use it in GitHub Desktop.
Скрипт перезагрузки роутера TP-Link TL-R480T+ [Powershell + Selenium]
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Clear-Host | |
#Указываем папку c webdriver.dll и драйвером нужного браузера | |
$seleniumPath = 'C:\scripts\selenium' | |
#Указываем браузер | |
$browser = 'firefox' | |
#Арес веб-интерфейса роутера | |
$url = 'http://192.168.1.1' | |
#Добавляем путь до webdrivera в переменные окружения пользователя | |
if (($env:Path -split ';') -notcontains $seleniumPath) { | |
$env:Path += ";$seleniumPath" | |
} | |
#Чтобы не хранить пароль в открытом виде, будем загружать его из файла tl-r480t.xml | |
#Если файл не найден/не читается, то просим пользователя ввести логин и пароль и экспортируем в файл | |
$credFile = Join-Path $seleniumPath 'tl-r480t.xml' | |
try { | |
$cred = Import-Clixml -Path $credFile | |
} | |
catch { | |
$cred = Get-Credential | |
$cred | Export-Clixml -Path $credFile | |
} | |
#Загружаем библиотеку WebDriver, используем Join-Path, чтобы минимизировать ошибку в пути | |
[System.Reflection.Assembly]::LoadFrom($(Join-Path $seleniumPath 'WebDriver.dll')) | |
#Создаем объект драйвера браузера, в зависимости от того, какой указан в переменной | |
if ($browser -eq 'firefox') { | |
$browser = New-Object OpenQA.Selenium.Firefox.FirefoxDriver | |
} | |
else { | |
$browser = New-Object OpenQA.Selenium.Chrome.ChromeDriver | |
} | |
#Переходим на страницу авторизации | |
$browser.Navigate().GoToUrl($url) | |
#Вводим логин и пароль | |
$browser.FindElementById('txt_usr_name').SendKeys($cred.UserName) | |
$browser.FindElementById('txt_password').SendKeys($cred.GetNetworkCredential().Password) | |
$browser.FindElementById('btn_logon').Click() | |
#Если роутер ругается, что есть активная сессия, то нажимаем кнопку далее | |
try { | |
$browser.FindElementByXPath('//*[@id="btn_confirm"]').Click() | |
} | |
catch { | |
$Error.Remove($Error[0]) | |
} | |
#Переходим в Maintenance / Management. | |
#Важный момент: если элементы находятся внутри фрейма, то нужно переключить на него | |
$browser.SwitchTo().Frame('bottomLeftFrame') | |
$browser.FindElementById('ol26').Click() | |
$browser.FindElementById('a28').Click() | |
#Выходим из фрейма, иначе мы не увидим элементы за его пределами | |
$browser.SwitchTo().DefaultContent() | |
#Переходим на вкладку Reboot и кликаем по кнопке перезагрузка | |
$browser.SwitchTo().Frame('mainFrame') | |
$browser.FindElementByXPath('/html/body/table/tbody/tr/td[6]/div/span').Click() | |
$browser.FindElementById('btn_reboot').Click() | |
#$browser.SwitchTo().ParentFrame() | |
#Подтверждаем перезагрузку, кликнув Ок в модальном окне | |
$browser.SwitchTo().Alert().Accept() | |
$browser.Close() | |
$browser.Quit() | |
Exit |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment