0

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

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

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

4

1 回答 1

0

在尝试了很多不同的事情之后,没有一个奏效,这就是我最终让它工作的方式。它并不漂亮,但效果很好,只需几秒钟即可提取所有日志,然后我可以稍后对其进行解析。

这适用于 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()
于 2019-09-03T11:33:53.510 回答