Powershell 调用Webrequest单击按钮并使用会话变量继续

Powershell 调用Webrequest单击按钮并使用会话变量继续,powershell,post,button,invoke-webrequest,Powershell,Post,Button,Invoke Webrequest,我正在尝试登录我的打印机,从中获取日志,并使用powershell解析它们 登录框不是表单,而是包含输入文本框的无序列表 因此,我成功地选择了PIN文本框并给它正确的值 我还设法抓住了我必须单击的按钮,但现在我的问题是,我需要单击该按钮并声明一个SessionVariable,以便在单击按钮并登录后继续该会话 如何正确单击此按钮?我正在尝试,但它不起作用: $Page = Invoke-WebRequest -Uri "http://xxx/webglue/content?c=LoginDrop

我正在尝试登录我的打印机,从中获取日志,并使用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"
这暂时不起作用,因为我没有正确登录,因为我无法正确单击“发布”按钮

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

http://PRINTER-IP/webglue/content?c=LoginDropdown&lang=fr“+$BoutonConnexion.click()是基于它是如何处理表单的,但我确信它在这种情况下是错误的。如何正确地单击它?

在尝试了很多不同的事情后,没有一个成功,下面是我如何让它成功的。它并不漂亮,但效果很好,只需几秒钟就可以提取所有日志,我可以稍后解析

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