DOC / 0207 WinITPro.ru

Автоматизация любых действий в браузере с помощью PowerShell и Selenium

Для автоматизации различных действий в браузере из скриптов PowerShell можно использовать фреймворк Selenium. С помощью Selenium вы можете получить содержимое веб страницы так, как его видит пользователь (отрабатываются все скрипты Java, стили, куки) Чаще всего Selenium используется для тестирования веб-сайтов с имитацией действий реального пользователя, но также он может быть полезным инструментом системного администратора для автоматизации действий и получения данных из веб-приложений и панелей управления. Например, с помощью Selenium вы можете автоматически выполнить любые действий в произвольном веб-интерфейсе администрирования, для которого отсутствует открытый доступ через API или веб хуки. Выполнить автоматический вход в веб интерфейс приложения, переходить по ссылкам, щёлкать по элементам или кнопкам в панели управления, заполнять и отправлять данные в формах, имитировать движение мыши, делать скриншоты веб страницы – все этом возможно с помощью Selenium.
В этой статье мы рассмотрим, как системный администратор Windows может использовать возможности фреймворка Selenium в скриптах PowerShell (статья предназначена для администраторов, далеких от веб программирования).


Содержание:
Возможности встроенного PowerShell командлета Invoke-WebRequest при доступе веб сайтом весьма ограничены. При открытии сайта он не выполняет Javascript код, не меняет User-Agent, не позволяет эмулировать движение мыши.

Установка библиотеки и драйвера Selenium для браузера

Для использования Selenium в скриптах PowerShell на компьютер нужно скопировать два файла:

  • Библиотеку Selenium (файл Webdriver.dll). Проще всего скачать NuGet архив с пакетом Selenium отсюда (https://www.nuget.org/packages/Selenium.WebDriver) и извлечь файл Webdriver.dll из папки
    selenium.webdriver.4.21.0.nupkg\lib\netstandard2.0\

    с помощью 7Zip Webdriver.dll драйвер фреймворка Selenium

  • Скачайте драйвер для браузера, в котором вы будете обращаться к сайтам из Selenium. Доступны драйвера для браузеров Firefox, Opera, Edge, Safari. В моем примере я буду использовать драйвер для Google Chrome. Скачайте драйвер для своей версии Google Chrome здесь (версия драйвера и браузера на компьютере должны совпадать). Поместите файл chromedriver.exe в каталог с библиотекой (не забудьте разблокировать скачанный из интернета исполняемый файл). chromedriver.exe - драйвер браузера chrome для selenium

Взаимодействие с браузером из скрипта PowerShell через библиотеку Selenium

Рассмотрим небольшой пример доступа к вебсайту из скрипта PowerShell, эмуляции нажатий на кнопки и получение данных с веб страницы с помощью Selenium. Наша задача — измерить скорость интернет-подключения провайдера с помощью популярного веб-сервиса https://www.speedtest.net/. Пользователю для проверки скорости на Speedtest нужно нажать кнопку и дождаться результатов. В нашем примере мы будем эмулировать нажатие кнопки в браузере и получим результаты тестирования со страницы в наш скрипт.

Добавляем путь к каталогу Selenium в переменные окружения текущей сессии PowerShell:

$selenium_path = 'C:\PS\selenium'
$env:Path += ";$selenium_path"

Импорт библиотеки Selenium:

Import-Module "$selenium_path\WebDriver.dll"

Создать объект браузера и перейти на указанный URL:

$selenium = New-Object OpenQA.Selenium.Chrome.ChromeDriver -ArgumentList $selenium_path
$selenium.Navigate().GoToURL(https://www.speedtest.net/')

Чтобы нажать кнопку Go на сайте из кода PowerShell скрипта, нужно найти соответствующий элемент на странице. Для идентификации элементов веб страницы я предпочитаю использовать Xpath (для меня это более понятный способ, веб программисты скорее всего будут использовать что-то другое).

В браузере щелкните по элементу, чей Xpath вы хотите узнать и выберите Inspect. Откроется окно с инструментами разработчика Chrome. Ваш элемент интерфейса будет подсвечен в консоли инспектора HTML кода. Выберите Copy -> Copy XPath.

Получения Xpath элемента на сайте

Чтобы найти HTML элемент на веб странице по XPath, используется команда:

$selenium.FindElement([OpenQA.Selenium.By]::XPath('ваш XPATH'))
Можно искать объекты на веб странице и с помощью других свойств:
[OpenQA.Selenium.By]::ClassName('')
[OpenQA.Selenium.By]::Id('')
[OpenQA.Selenium.By]::LinkText('')
[OpenQA.Selenium.By]::Name('')
[OpenQA.Selenium.By]::PartialLinkText('')
[OpenQA.Selenium.By]::TagName('')

Например, чтобы выбрать кнопку и щелкнуть по ней в этом примере нужно выбрать элемент и вызвать метод Click:

$selenium.FindElement([OpenQA.Selenium.By]::XPath('/html/body/div[3]/div/div[3]/div/div/div/div[2]/div[3]/div[1]/a/span[4]')).Click()

Выполнив эту команду, вы нажмете кнопку на сайте и запустите тест скорости.

нажать кнопку на веб сайте, метод click selenium

Ранее мы рассматривали как измерить скорость Интернета из командной строки Windows.

Через несколько секунд на экране появятся результаты тестирования. По аналогии, я скопировал значения XPath для двух HTML элементов, в которых отображается Upload и Download скорости.

консоль разработчика chrome - скопировать xpath

Текстовые значения элементов можно получить с помощью свойства .text. Т.к. сервису нужно некоторое время на измерение скоростей, я добавил задержку 60 секунд перед проверкой значений на странице:

sleep 60
$cur_download_speed=$selenium.FindElement([OpenQA.Selenium.By]::XPath('/html/body/div[3]/div/div[3]/div/div/div/div[2]/div[3]/div[3]/div/div[3]/div/div/div[2]/div[1]/div[1]/div/div[2]/span')).text
$cur_upload_speed=$selenium.FindElement([OpenQA.Selenium.By]::XPath('/html/body/div[3]/div/div[3]/div/div/div/div[2]/div[3]/div[3]/div/div[3]/div/div/div[2]/div[1]/div[2]/div/div[2]/span')).text
Write-host "Download: $cur_download_speed MBps, Upload: $cur_upload_speed MBps"

получить данные с веб страницы в PowerShell

После завершения работы скрипта, нужно корректно выгрузить из памяти объекты браузера и библиотеку Selenium.

$selenium.Close()
$selenium.Quit()

При закрытии браузера кэш и куки очищаются.

Таким образом, у вас получился небольшой PowerShell скрипт, который автоматически выполняет действие на веб странице и возвращает вам результаты.

Использование PowerShell и Selenium в веб-интерфейсах администрирования

Возможности Selenium можно использовать в задачах администрирования или мониторинга различных продуктов, которые управляются через веб интерфейс.

В следующем примере, мы покажем, как из скрипта PowerShell подключиться к веб интерфейсу Proxmox VE, автоматически ввести пароль и получить информацию о состоянии виртуальных машинах.

Для подключения к веб-интерфейсу Proxmox воспользуемся следующим кодом:

$path = "C:\PS\selenium"
$log = "$path\ChromeDriver.log"
$ChromeDriver = "$path\ChromeDriver.exe"
$WebDriver = "$path\WebDriver.dll"
$ChromeOptions = New-Object OpenQA.Selenium.Chrome.ChromeOptions
# Игнорировать предупреждения Chrome о самоподписанных и недействительных сертификатах
$ChromeOptions.AcceptInsecureCertificates = $True
# скрыть окно браузера при запуске
#$ChromeOptions.AddArgument("headless")
# запустить окно браузера свернутым
#$ChromeOptions.AddArgument("start-minimized")
$ChromeDriverService = [OpenQA.Selenium.Chrome.ChromeDriverService]::CreateDefaultService($ChromeDriver)
$ChromeDriverService.HideCommandPromptWindow = $True
$Selenium = New-Object OpenQA.Selenium.Chrome.ChromeDriver($ChromeDriverService, $ChromeOptions)
$Selenium.Navigate().GoToURL('https://192.168.31.95:8006/')

Для подключения к веб интерфейсу Proxmox пользователю нужно ввести имя пользователя и пароль. С помощью Selenium вы можете заполнить формы и отправить данные на сайт. В этом примере нужно, как описано выше получить XPath полей для ввода имени пользователя и пароля и передать в них данные.

$username= $selenium.FindElement([OpenQA.Selenium.By]::XPath('/html/body/div[9]/div[2]/div/div/div/div/div/div[1]/div/div/div/div[1]/div/div/div/input'))
$username.Click()
#отправить имя пользователя
$username.SendKeys('root')
$password=$selenium.FindElement([OpenQA.Selenium.By]::XPath('/html/body/div[9]/div[2]/div/div/div/div/div/div[1]/div/div/div/div[2]/div/div/div/input'))
$password.Click()
#отправить пароль
$password.SendKeys('mypass123')

Автоматическая аутентифкация в веб интерфейсе через Selenium

Чтобы выполнить вход, нужно нажать на кнопку Login (вызвать метод Click).

$selenium.FindElement([OpenQA.Selenium.By]::XPath('/html/body/div[9]/div[2]/div/div/div/div/div/div[2]/div/div/a/span/span/span[2]')).Click()
sleep 4
#Нажать кнопку OK в сообщении об отсутствующей подписке Proxmox
$selenium.FindElement([OpenQA.Selenium.By]::XPath('//html/body/div[12]/div[2]/div[2]/div/div/a[1]/span/span/span[2]')).Click()

Теперь нужно перейти в раздел Summary и получить значения из полей о запущенных и остановленных виртуальных машинах.

Получить данные с веб интерфейса управления виртуализацией Proxmox через драйвер Selenium

# Переходим в раздел Summary
$selenium.FindElement([OpenQA.Selenium.By]::XPath('/html/body/div[2]/div/div/div[2]/div[2]/div/div/ul/li[2]/div/div/div[2]')).Click()
# Узнать количество запущенных и остановленных виртуальных машин
sleep 5
$runningVMs= $selenium.FindElement([OpenQA.Selenium.By]::XPath('/html/body/div[2]/div/div/div[3]/div/div/div/div/div/div[2]/div[2]/div/table/tbody/tr[1]/td[1]/div/div[1]/div[2]')).text
$stoppedVMs= $selenium.FindElement([OpenQA.Selenium.By]::XPath('/html/body/div[2]/div/div/div[3]/div/div/div/div/div/div[2]/div[2]/div/table/tbody/tr[1]/td[1]/div/div[2]/div[2]')).text
$selenium.Close()
$selenium.Quit()
# Вывести информацию о ВМ полученную из Proxmox
$runningVMs
$stoppedVMs

Получить результаты из браузера в PowerShell скрипте

В некоторых веб-формах нужно использовать метод Submit для отправки данных из формы:

$form = $selenium.FindElement([OpenQA.Selenium.By]::Xpath('тут_путь'))
$form.Submit()

Некоторые JS элементы интерфейсов на веб сайтах срабатывают только при наведении курсора мыши. Вы можете перевести курсор мыши на объект так:

$action = New-Object OpenQA.Selenium.Interactions.Actions($selenium)
$element = $selenium.FindElement([OpenQA.Selenium.By]::XPath('тут_путь'))
$action.MoveToElement($element).Build().Perform()

В этой статье мы рассмотрели базовые аспекты использования фреймворка Selenium в PowerShell скриптах для автоматизации задач системного администрирования.

ORIGINAL / ATTRIBUTION

Источник материала

Источник материала — WinITPro.ru. Оригинальная статья и авторство указаны по ссылке ниже.

Оригинал статьи на WinITPro.ru ↗

https://winitpro.ru/index.php/2024/05/28/avtomatizaciya-v-brauzere-selenium-powershell/

Материал проверен 09.10.2026. При изменении программного обеспечения сверяйтесь с актуальной документацией.
← Вернуться в базу знаний