PS.Selenium.Modules
0.1.1
dotnet add package PS.Selenium.Modules --version 0.1.1
NuGet\Install-Package PS.Selenium.Modules -Version 0.1.1
<PackageReference Include="PS.Selenium.Modules" Version="0.1.1" />
paket add PS.Selenium.Modules --version 0.1.1
#r "nuget: PS.Selenium.Modules, 0.1.1"
// Install PS.Selenium.Modules as a Cake Addin #addin nuget:?package=PS.Selenium.Modules&version=0.1.1 // Install PS.Selenium.Modules as a Cake Tool #tool nuget:?package=PS.Selenium.Modules&version=0.1.1
Selenium ✅ via ▶️ PowerShell
A small library of PowerShell modules using Selenium.
Automated deployment and updating of all dependencies (Chromium browser, Selenium and Chrome drivers) to be able to work with Selenium library using PowerShell language.
Modules with working examples can be found here ➡️ Selenium-Modules
🚀 To quickly install or update all drivers and chromium of the appropriate version, use the following command in your terminal:
Invoke-Expression(New-Object Net.WebClient).DownloadString("https://raw.githubusercontent.com/Lifailon/Deploy-Selenium/rsa/Deploy-Selenium-Drivers.ps1")
📚 File composition:
PS C:\Users\lifailon\Documents\Selenium> Get-ChildItem
Directory: C:\Users\lifailon\Documents\Selenium
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 18.10.2023 12:39 chrome-win32
-a--- 26.05.2023 18:39 12273664 chromedriver.exe
-a--- 15.10.2023 16:47 4276224 WebDriver.dll
-a--- 15.10.2023 16:47 33792 WebDriver.Support.dll
📑 Example connection and work
Example of connecting a set of drivers and working with selenium via PowerShell:
$path = "$home\Documents\Selenium\"
$log = "$path\ChromeDriver.log"
$ChromeDriver = "$path\ChromeDriver.exe"
$WebDriver = "$path\WebDriver.dll"
$SupportDriver = "$path\WebDriver.Support.dll"
$Chromium = (Get-ChildItem $path -Recurse | Where-Object Name -like chrome.exe).FullName
Add-Type -Path $WebDriver
Add-Type -Path $SupportDriver
try {
$ChromeOptions = New-Object OpenQA.Selenium.Chrome.ChromeOptions # создаем объект с настройками запуска браузера
$ChromeOptions.BinaryLocation = $Chromium # передаем путь до исполняемого файла, который отвечает за запуск браузера
$ChromeOptions.AddArgument("start-maximized") # добавляем аргумент, который позволяет запустить браузер на весь экран
$ChromeOptions.AcceptInsecureCertificates = $True # игнорировать предупреждение на сайтах с не валидным сертификатом
#$ChromeOptions.AddArgument("headless") # скрывать окно браузера при запуске
$ChromeDriverService = [OpenQA.Selenium.Chrome.ChromeDriverService]::CreateDefaultService($ChromeDriver) # создаем объект настроек службы драйвера
$ChromeDriverService.HideCommandPromptWindow = $True # отключаем весь вывод логирования драйвера в консоль (этот вывод нельзя перенаправить)
$ChromeDriverService.LogPath = $log # указать путь до файла с журналом
$ChromeDriverService.EnableAppendLog = $True # не перезаписывать журнал при каждом новом запуске
#$ChromeDriverService.EnableVerboseLogging = $True # кроме INFO и ошибок, записывать DEBUG сообщения
$Selenium = New-Object OpenQA.Selenium.Chrome.ChromeDriver($ChromeDriverService, $ChromeOptions) # инициализируем запуск с указанными настройками
$Selenium.Navigate().GoToUrl("https://google.com")
$Search = $Selenium.FindElements([OpenQA.Selenium.By]::Id('APjFqb'))
$Search = $Selenium.FindElements([OpenQA.Selenium.By]::XPath('//*[@id="APjFqb"]'))
$Search = $Selenium.FindElements([OpenQA.Selenium.By]::Name('q'))
$Search = $Selenium.FindElements([OpenQA.Selenium.By]::XPath('//*[@name="q"]'))
$Search = $Selenium.FindElements([OpenQA.Selenium.By]::ClassName('gLFyf'))
$Search = $Selenium.FindElements([OpenQA.Selenium.By]::CssSelector('[jsname="yZiJbe"]'))
$Search = $Selenium.FindElements([OpenQA.Selenium.By]::TagName('textarea')) | Where-Object ComputedAccessibleRole -eq combobox
$Search.SendKeys("calculator online")
$Search.SendKeys([OpenQA.Selenium.Keys]::Enter)
Start-Sleep 1
$div = $Selenium.FindElements([OpenQA.Selenium.By]::TagName("div"))
$2 = $div | Where-Object {($_.ComputedAccessibleRole -eq "button") -and ($_.ComputedAccessibleLabel -eq "2")}
$2.Click()
$2.Click()
$plus = $div | Where-Object {($_.ComputedAccessibleRole -eq "button") -and ($_.Text -eq "+")}
$plus.Click()
$3 = $Selenium.FindElement([OpenQA.Selenium.By]::CssSelector('[jsname="KN1kY"]'))
$3.Click()
$3.Click()
$sum = $Selenium.FindElement([OpenQA.Selenium.By]::CssSelector('[jsname="Pt8tGc"]'))
$sum.Click()
$result = $Selenium.FindElement([OpenQA.Selenium.By]::CssSelector('[jsname="VssY5c"]')).Text
Write-Host "Result: $result" -ForegroundColor Green
}
finally {
$Selenium.Close()
$Selenium.Quit()
}
Search for calculator online in the search string, execute 22+33 using the clicks and output the result to the console:
PS C:\Users\lifailon> . 'C:\Users\lifailon\Documents\Git\Deploy-Selenium\Selenium-Example.ps1'
Result: 55
Selenium-Modules
Install module PS.Selenium.Modules
:
PS > Install-Module PS.Selenium.Modules
PS > Get-Command -Module PS.Selenium.Modules
CommandType Name Version Source
----------- ---- ------- ------
Function Get-LangChain 0.1 PS.Selenium.Modules
Function Get-Phind 0.1 PS.Selenium.Modules
Function Get-SpeedTest 0.1 PS.Selenium.Modules
Function Get-Translation 0.1 PS.Selenium.Modules
Function Get-YaGPT 0.1 PS.Selenium.Modules
ChatGPT
⚠️ In the example, the server ChatGPT no longer works. A new repository GPT-to-Code created to work with different AI models.
🐥 The idea is that if you can't get an API key, you can use a third-party 🙏 free Chat-GPT web interface that doesn't require authorization to be able to implement the interface for your scripts or just chat with the bot in the PowerShell console.
🚀 Install module Get-GPT
To install the module in the default PowerShell modules directory, run the command in your console:
Invoke-RestMethod https://raw.githubusercontent.com/Lifailon/Selenium-Modules/rsa/Modules/Get-GPT/Get-GPT.psm1 | Out-File -FilePath "$(New-Item -Path "$($($Env:PSModulePath -split ";")[0])\Get-GPT" -ItemType Directory -Force)\Get-GPT.psm1" -Force
🎉 Example Get-GPT
PS C:\Users\lifailon> Import-Module Get-GPT
PS C:\Users\lifailon> Get-GPT "Исполняй роль калькулятора. Посчитай сумму чисел: 22+33"
Конечно! Сумма чисел 22 и 33 равна 55. Чем еще я могу помочь?
PS C:\Users\lifailon> Get-GPT "Исполняй роль интерпретатора PowerShell. Выведи результат команды: Write-Host $(22+33)"
Конечно! Вот результат выполнения команды "Write-Host 55":
55
PS C:\Users\lifailon> Get-GPT "Исполняй роль переводчика. Переведи текст на русский язык: Hi! How can I help you?"
Привет! Как я могу тебе помочь?
PS C:\Users\lifailon> Get-GPT "Напиши код на языке PowerShell, который позволяет получить прогноз погоды"
Конечно! Вот пример кода на языке PowerShell, который использует API OpenWeatherMap для получения прогноза погоды:
# Установка модуля Invoke-RestMethod, если необходимо
if (-not (Get-Module -ListAvailable -Name 'PowerShellGet')) {
Install-PackageProvider -Name 'NuGet' -Force
}
if (-not (Get-Module -ListAvailable -Name 'PackageManagement')) {
Install-Module -Name 'PackageManagement' -Force
}
if (-not (Get-Module -ListAvailable -Name 'PowerShellGet')) {
Install-Module -Name 'PowerShellGet' -Force
}
if (-not (Get-Module -ListAvailable -Name 'Invoke-RestMethod')) {
Install-Module -Name 'Invoke-RestMethod' -Force
}
# Замените 'YOUR_API_KEY' на ваш ключ API OpenWeatherMap
$apiKey = 'YOUR_API_KEY'
# Замените 'CITY_NAME' на название города, для которого нужен прогноз погоды
$city = 'CITY_NAME'
# Формирование URL-запроса к API OpenWeatherMap
$url = "http://api.openweathermap.org/data/2.5/weather?q=$city&appid=$apiKey"
# Получение данных о погоде через API
$response = Invoke-RestMethod -Uri $url
# Извлечение нужной информации из ответа API
$temperature = $response.main.temp
$description = $response.weather[0].description
# Вывод информации о погоде
Write-Host "Текущая температура в городе $city: $temperature градусов Цельсия"
Write-Host "Описание погоды: $description"
Не забудьте заменить 'YOUR_API_KEY' на ваш собственный ключ API OpenWeatherMap и 'CITY_NAME' на название города, для которого вы хотите получить прогноз погоды. После запуска скрипта, вы увидите текущую температуру и описание погоды
Text Translation
Translation text directly in the PowerShell console.
The module uses 2 providers to choose from:
🚀 Install module Get-Translation
Invoke-RestMethod https://raw.githubusercontent.com/Lifailon/Selenium-Modules/rsa/Modules/Get-Translation/Get-Translation.psm1 | Out-File -FilePath "$(New-Item -Path "$($($Env:PSModulePath -split ";")[0])\Get-Translation" -ItemType Directory -Force)\Get-Translation.psm1" -Force
🎉 Example Get-Translation
PS C:\Users\lifailon> Get-Translation -Provider DeepL -Text "I translating the text"
Я перевожу текст
PS C:\Users\lifailon> Get-Translation -Provider DeepL -Text "Я перевожу текст"
I'm translating the text
PS C:\Users\lifailon> Get-Translation -Provider Google -Text "I translating the text"
Я переводил текст
PS C:\Users\lifailon> Get-Translation -Provider Google -Text "Я перевожу текст" -Language en
I am translating the text
Console-Translate
You can use the Console-Trsanslate module to free translate text without dependencies using the API (Google public key and DeepLX free API):
Invoke-Expression(New-Object Net.WebClient).DownloadString("https://raw.githubusercontent.com/Lifailon/Console-Translate/rsa/Deploy-Console-Translate.ps1")
Internet SpeedTest
The module uses 3 providers to choose from:
📊 The module is debugged on PowerShell Core and can be used to collect metrics with output to InfluxDB. As an example, you can use other work Ookla-SpeedTest-API, which alternatively uses InternetExplorer via COM Interface.
🚀 Install module Get-SpeedTest
Invoke-RestMethod https://raw.githubusercontent.com/Lifailon/Selenium-Modules/rsa/Modules/Get-SpeedTest/Get-SpeedTest.psm1 | Out-File -FilePath "$(New-Item -Path "$($($Env:PSModulePath -split ";")[0])\Get-SpeedTest" -ItemType Directory -Force)\Get-SpeedTest.psm1" -Force
🎉 Example Get-SpeedTest
PS C:\Users\lifailon\Desktop> Get-SpeedTest -Provider Libre
Download Upload Ping Jitter
-------- ------ ---- ------
171 Mbps 28.0 Mbps 22.0 ms 1.40 ms
PS C:\Users\lifailon\Desktop> Get-SpeedTest -Provider Open
Download : 254.68 Mbps
Upload : 80.24 Mbps
Ping : 5.6 ms
Jitter : 0.30 ms
Carrier : SEVEN-SKY
Server : Stockholm
Result : openspeedtest.com/results/63074923
Date : Jan 9 2024 4:06 PM UTC
PS C:\Users\lifailon\Desktop> Get-SpeedTest -Provider Ookla
date : 09.01.2024 19:08:23
id : 15729550610
connection_icon : wireless
download : 272707
upload : 272986
latency : 3
distance : 0
country_code : RU
server_id : 53268
server_name : Moscow
sponsor_name : City-Telecom ZAO
sponsor_url :
connection_mode : multi
isp_name : Seven Sky
isp_rating : 3.5
test_rank : 100
test_grade : A+
test_rating : 5
idle_latency : 4
download_latency : 50
upload_latency : 14
additional_servers : {@{server_id=22121; server_name=Moscow; sponsor_name=MosLine Group LLC}, @{server_id=23499; server_name=Moscow; sponsor_name=Марьино.net},
@{server_id=11266; server_name=Moscow; sponsor_name=INETCOM LLC}}
path : result/15729550610
hasSecondary : True
Learn more about Target Frameworks and .NET Standard.
This package has no dependencies.
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.