Invoke-Webrequest 单击一个按钮并继续会话变量

Invoke-Webrequest click a button and continue with a session variable

我正在尝试登录我的打印机以从中获取日志并使用 powershell 解析它们。

登录框不是 FORM,它是一个包含 INPUT 文本框的无序列表。

所以我设法 select 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() 是基于表单的处理方式,但我确信在这种情况下它是错误的。如何正确点击?

在尝试了很多不同的东西之后,none 成功了,这就是我最终让它成功的方法。它不是很漂亮,但它运行良好,只需几秒钟即可提取所有日志,然后我可以稍后解析。

这适用于 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()