Skip to content

Instantly share code, notes, and snippets.

@themaximax
Last active January 31, 2021 13:19
Show Gist options
  • Save themaximax/8c5689c890e3738ee31ec22c04f7058b to your computer and use it in GitHub Desktop.
Save themaximax/8c5689c890e3738ee31ec22c04f7058b to your computer and use it in GitHub Desktop.
Скрипт перезагрузки роутера TP-Link TL-R480T+ [Powershell + Selenium]
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