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()
我正在尝试登录我的打印机以从中获取日志并使用 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()