У меня, очевидно, нет вашей страницы, и я не могу гарантировать, что тело POST
от имени для входа содержит поля login
и password
, так что вам потребуются некоторые пробные версии и ошибки.В качестве мини-примера, если вы откроете вкладку сети консоли dev tools и отфильтруете по POST
, вы сможете наблюдать, как ваша страница входа регистрирует вас. Когда я открываю reddit для входа, она отправляет POST
в https://www.reddit.com/login
с телом, содержащим ключ / значение username
и password
(оба в виде открытого текста).Это действие настраивает мой сеанс браузера для сохранения моего логина.
Вот пример кода, который использует библиотеку HtmlAgilityPack
для взаимодействия с получающейся страницей, как если бы она была XML
.
Включение TLS1.2:
[System.Net.ServicePointManager]::SecurityProtocol =
[System.Net.ServicePointManager]::SecurityProtocol -bor [System.Net.SecurityProtocolType]::Tls12
Настройка веб-сеанса:
$iwrParams = @{
'Uri' = 'https://webpage.com/index.jsp'
'Method' = 'POST'
'Body' = @{
'login' = $username
'password' = $password
}
'SessionVariable' = 'session'
# avoids cases where IE has not been opened
'UseBasicParsing' = $true
}
# don't care about response - only here to initialize the session
$null = Invoke-WebRequest @iwrParams
Получение содержимого защищенной страницы:
$iwrParams = @{
'Uri' = 'https://webpage.com/home.pa#%5BT1%2CM181%5D'
'WebSession' = $session
'UseBasicParsing' = $true
}
$output = (Invoke-WebRequest @iwrParams).Content
Загрузка / добавление HtmlAgility
:
if (-not (Test-Path -Path "$PSScriptRoot\HtmlAgilityPack.dll" -PathType Leaf))
{
Invoke-WebRequest -Uri https://www.nuget.org/api/v2/package/HtmlAgilityPack -OutFile "$PSScriptRoot\html.zip"
Expand-Archive -Path "$PSScriptRoot\html.zip" -DestinationPath "$PSScriptRoot\html" -Force
Copy-Item -Path "$PSScriptRoot\html\lib\netstandard2.0\HtmlAgilityPack.dll" -Destination "$PSScriptRoot\"
Remove-Item -Path "$PSScriptRoot\html", "$PSScriptRoot\html.zip" -Recurse -Force
}
Add-Type -Path "$PSScriptRoot\HtmlAgilityPack.dll"
$html = [HtmlAgilityPack.HtmlDocument]::new()
Загрузка / анализ содержимого вашей страницы:
$html.LoadHtml($output)
# do stuff with output.
$html.DocumentNode.SelectNodes('//*/text()').Text.Where{$PSItem -like '*=*'}
Сноска
Я сделал предположение в коде, который вы выполняли изскрипт где $PSScriptRoot
будет заполнен.Если он запускается в интерактивном режиме, вы можете использовать вместо него автоматическую переменную $pwd
(перенос из * nix, рабочий каталог печати).Для этого кода требуется PSv5 +.