Как аутентифицировать веб-страницу брандмауэра с помощью драйвера Powershell / Selenium-Chrome? - PullRequest
1 голос
/ 05 мая 2019

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

Изображение: https://i.stack.imgur.com/pkuDl.png

Самая большая проблема заключается в использовании межсетевого экрана Fortinet, который запрашивает аутентификацию через браузер, так как большая частьПриложение использует для установки файлы, которые находятся на сервере через SMB, необходимо выполнить эту аутентификацию, поскольку без нее алгоритм не сможет аутентифицироваться на сервере, что приведет к его сбою в ходе курса.

Image: https://i.stack.imgur.com/bqZAR.png

URL-адрес страницы: https://authenticator.mpms.mp.br/caplogin/?login&post=http://10.111.147.1:1000/fgtauth&magic=0202e294cb1c7073&usermac=10:e7:c6:c5:c3:61&apmac=00:00:00:00:00:00&apip=10.111.147.1&userip=10.111.147.22&ssid=PGJ-BANCADA&apname=FGT2KE3917900027&bssid=00:00:00:00:00:00&device_type=windows-pc

Однако, проверяя это через Selenium, он даже аутентифицируется, но после перезагрузки компьютера и запуска следующего скрипта он запрашивает аутентификациюснова.

Следуйте коду, который я сделал для аутентификации в Fortnet, а затем после входа в систему, чтобы сделать запрос на сайте globo.com

############################################
######## Enable Fortinet Firewall ##########
############################################

$YourURL = "https://authenticator.mpms.mp.br/"

# Adds the path for ChromeDriver.exe to the environmental variable 
$env:PATH += ";C:\Util\PSL\" 

# Adding Selenium's .NET assembly (dll) to access it's classes in this PowerShell session
Add-Type -Path "C:\Util\PSL\WebDriver.dll" 

$ChromeOptions = New-Object OpenQA.Selenium.Chrome.ChromeOptions
$ChromeDriver = New-Object OpenQA.Selenium.Chrome.ChromeDriver($ChromeOptions)
$ChromeDriver.Capabilities.BrowserName

# Browse to the specified website
$ChromeDriver.Navigate().GoToURL($YourURL) 

# Methods to find the input textbox for google search and then to type something in it
$ChromeDriver.FindElementByName("username").SendKeys("username")
$ChromeDriver.FindElementByName("password").SendKeys("password") 
$ChromeDriver.FindElementsByClassName("submit").Submit() 


#### New page #####
$YourURL = "https://www.globo.com/"
$ChromeDriver.Navigate().GoToURL($YourURL) 

Function Stop-ChromeDriver {Get-Process -Name chromedriver -ErrorAction SilentlyContinue | Stop-Process -ErrorAction SilentlyContinue}

# Close selenium browser session method
$ChromeDriver.Close() 

# End ChromeDriver process method
$ChromeDriver.Quit() 

# Function to make double sure the Chromedriver process is finito (double-tap!)
Stop-ChromeDriver

Когда мы делаем это вручную,следующие шаги будут выполняться нормально, что, по моему заключению, делает драйвер Selenium на самом деле не браузером Google Chrome, а скорее его собственным,Это означает, что он не распознает аутентификацию..

Остается вопрос: можно ли добавить эту опцию в сценарий, чтобы мы могли проходить аутентификацию в Fortinet Web и, таким образом, избегать ручных действий и автоматизировать нашу работу?Хотелось бы выполнить эту задачу для Powershell, но у меня есть другая альтернатива.

Спасибо!

1 Ответ

0 голосов
/ 06 мая 2019

Почему бы не использовать vbs в PowerShell` для отправки необходимых разрешений ?

$wshell = New-Object -ComObject wscript.shell; $obj = New-Object -com Wscript.Shell;
$wshell.AppActivate('Chrome');
pathping 127.0.0.1 -n -q 1 -p 300 >$null
$obj.SendKeys('paulogoncalves');
pathping 127.0.0.1 -n -q 1 -p 150 >$null
$obj.SendKeys("{TAB}")
pathping 127.0.0.1 -n -q 1 -p 150 >$null
$obj.SendKeys('senhasecreta')
pathping 127.0.0.1 -n -q 1 -p 150 >$null
$obj.SendKeys('{ENTER}');```

...