Invoke-Webrequest нажмите кнопку и продолжите с переменной сеанса

Я пытаюсь войти в свои принтеры, чтобы получить от них журналы и проанализировать их с помощью powershell.

Поле входа в систему — это не ФОРМА, это неупорядоченный список, содержащий текстовые поля ВВОД.

Итак, мне удалось выбрать текстовое поле PIN-кода и указать ему правильное значение.

Мне также удалось удержать кнопку, которую я должен нажать, но теперь моя проблема в том, что мне нужно нажать эту кнопку и объявить SessionVariable, чтобы я мог продолжить этот сеанс после нажатия кнопки, и я вошел в систему .

Как правильно нажать эту кнопку? Я пытаюсь это, но это не работает:

$Page = Invoke-WebRequest -Uri "http://xxx/webglue/content?c=LoginDropdown&lang=fr"`
-Headers @{"Pragma"="no-cache"; "Accept-Encoding"="gzip, deflate"; "Accept-Language"="fr-FR,fr;q=0.9,en-US;q=0.8,en;q=0.7"; "User-Agent"="Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36"; "Accept"="application/json, text/javascript, */*; q=0.01"; "Cache-Control"="no-cache"; "X-Requested-With"="XMLHttpRequest"; "Cookie"="lang=fr; autoLogin=false"; "Referer"="http://xxx/"}`
-ContentType "application/x-www-form-urlencoded; charset=utf-8"`
-SessionVariable "SESSION"

$TextboxPIN = $page.ParsedHtml.body.getElementsByTagName('input') | Where-Object {$_.OuterHTML -match "pin"} 
$TextboxPIN.value = "xxx"

$ConnectionButton = $page.ParsedHtml.body.getElementsByTagName('button') | Where-Object {$_.onclick -like "*login(this)*"}


Invoke-WebRequest -Uri ("http://xxx/webglue/content?c=LoginDropdown&lang=fr"+ $ConnectionButton.click() ) -Method POST -Body $ConnectionButton -SessionVariable "ADMIN"

На данный момент это не работает, потому что я неправильно вошел в систему, так как я не могу правильно нажать кнопку с помощью POST.

Invoke-WebRequest -uri "http://xxx/cgi-bin/history" -WebSession $ADMIN

Это http:// PRINTER-IP/webglue/content?c=LoginDropdown&lang=fr"+ $BoutonConnexion.click() основано на том, как это делается с формами, но я уверен, что в данном случае это неправильно. Как правильно нажать?


person Rakha    schedule 30.08.2019    source источник


Ответы (1)


Перепробовав много разных вещей, ничего не сработало, вот как я в итоге заработал. Это некрасиво, но работает хорошо и занимает всего несколько секунд, чтобы извлечь все журналы, которые я могу проанализировать позже.

Это для принтера Lexmark MS621n, но его можно адаптировать и для других принтеров Lexmark.

Это сбрасывает все файлы журналов, которые мне показались интересными:

$Printer = "IPofPrinter"

$ie = New-Object -ComObject 'InternetExplorer.Application'
$ie.visible = $true
$ie.navigate("http://$printer")

do {start-sleep -m 100} until ($ie.ReadyState -eq 4)

$Menu = $ie.document.IHTMLDocument3_getElementById("loginclickarea")
$menu.Click()
start-sleep 1

$pin = $ie.document.IHTMLDocument3_getelementsbytagname("input") | Where-Object {$_.OuterHTML -match "pin"} 
$pin.focus()

$wshell = New-Object -ComObject wscript.shell
$wshell.SendKeys("XXXXX")

$btn = $ie.document.IHTMLDocument3_getelementsbytagname("button") | Where-Object {$_.OuterHTML -like "*login(this)*"}
$btn.Click()

do {start-sleep -m 100} until ($ie.ReadyState -eq 4)


$ie.navigate("http://$printer/cgi-bin/enginedebugdata")
do {start-sleep -m 100} until ($ie.ReadyState -eq 4)
$ie.Document.documentElement.innerHTML > C:\TEMP\$($printer)_enginedebugdata.log

$ie.navigate("http://$printer/cgi-bin/eventlog_se")
do {start-sleep -m 100} until ($ie.ReadyState -eq 4)
$ie.Document.documentElement.innerHTML > C:\TEMP\$($printer)_eventlog.log


$ie.navigate("http://$printer/cgi-bin/history")
do {start-sleep -m 100} until ($ie.ReadyState -eq 4)
$ie.Document.documentElement.innerHTML > C:\TEMP\$($printer)_history.log

$ie.navigate("http://$printer/cgi-bin/se_net_details")
do {start-sleep -m 100} until ($ie.ReadyState -eq 4)
$ie.Document.documentElement.innerHTML > C:\TEMP\$($printer)_se_net_details.log

$ie.navigate("http://$printer/cgi-bin/netsetuppg")
do {start-sleep -m 100} until ($ie.ReadyState -eq 4)
$ie.Document.documentElement.innerHTML > C:\TEMP\$($printer)_netsetuppg.html

$ie.Stop()
$ie.Quit()
person Rakha    schedule 03.09.2019