Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/121.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell 使用Invoke WebRequest时Superss JS警报_Powershell - Fatal编程技术网

Powershell 使用Invoke WebRequest时Superss JS警报

Powershell 使用Invoke WebRequest时Superss JS警报,powershell,Powershell,这是我观察到的非常奇怪的行为。当网页中存在以下内容时,Invoke WebRequest将发出警报消息并暂停任何脚本,直到警报解除 <script> alert('testing'); </script> 这是最奇怪的一点。我已经尝试了很多次来避免这个警报-UseBasicParsing在我的情况下不是一个选项。因此,我尝试将对象分配给一个变量,并仅访问未提及警报的部分。例如: $x = Invoke-WebRequest 'http://activelab.io/co

这是我观察到的非常奇怪的行为。当网页中存在以下内容时,Invoke WebRequest将发出警报消息并暂停任何脚本,直到警报解除

<script>
alert('testing');
</script>

这是最奇怪的一点。我已经尝试了很多次来避免这个警报<代码>-UseBasicParsing在我的情况下不是一个选项。因此,我尝试将对象分配给一个变量,并仅访问未提及警报的部分。例如:

$x = Invoke-WebRequest 'http://activelab.io/code-snippets/show-alert-box-on-page-load'
$x.Forms
$x = Invoke-WebRequest 'http://activelab.io/code-snippets/show-alert-box-on-page-load'
$x.Forms
$x.Forms
$x.Forms
但这仍然会生成警报消息!即使是
$null=$x.Forms
或类似的技巧也无法阻止它

更奇怪的是,这只返回了一次。例如:

$x = Invoke-WebRequest 'http://activelab.io/code-snippets/show-alert-box-on-page-load'
$x.Forms
$x = Invoke-WebRequest 'http://activelab.io/code-snippets/show-alert-box-on-page-load'
$x.Forms
$x.Forms
$x.Forms
返回一条消息。只有当我重新调用请求时,我才能收到额外的错误

我还尝试在作业中运行它,但这仍然会创建警报。工作暂停,直到被解雇

<script>
alert('testing');
</script>

是否有人知道如何在不使用
-UseBasicParsing
参数的情况下解决此问题?

处存在SSL问题https://www.quackit.com/javascript/javascript_alert_box_example_2.cfm“
。我得到:

Invoke-WebRequest : The underlying connection was closed: An unexpected error occurred on a send.

At line:1 char:1
+ Invoke-WebRequest -uri 'https://www.quackit.com/javascript/javascript_alert_box_ ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-WebRequest], WebException
    + FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeWebRequestCommand
我不得不把它改成:
https://64.73.217.183/javascript/javascript_alert_box_example_2.cfm“
然后我可以在PS4.x中测试它

这个想法怎么样?使用
试试{}
捕获{}

Try {
    Invoke-WebRequest -uri 'https://64.73.217.183/javascript/javascript_alert_box_example_2.cfm'
} Catch {
 "$_"
}
由于“$”只生成简单的

基础连接已关闭:发送时发生意外错误

如果您不希望出现任何错误,只需删除或标记
“$\u”

如果您需要有关powershell错误处理的完整资源,请阅读

重新编辑关闭
警报
框显然不是那么容易。根据我的调查,它似乎是powershell中的iexplorer实例

在我看来,根据我的研究,没有办法“抑制”显示的警报窗口

但是,您可以这样做(解决方法):

一个脚本是原始脚本:

$x = Invoke-WebRequest -uri 'http://activelab.io/code-snippets/show-alert-box-on-page-load'
$x.Forms
第二个是关闭窗口(您需要有WASP(Powershell的Windows自动化管理单元)模块):

然后有第三个脚本,应该在后台异步启动脚本(这只是一个简单的例子,你可以想象一下:


使用
-UseBasicPassing

$Request = Invoke-WebRequest 'http://activelab.io/code-snippets/show-alert-box-on-page-load' -UseBasicParsing

*编辑:我知道您声明不能使用
-UseBasicParsing
,但这里的要点是您不必实现自己的解析。您可以使用修改响应后调用WebRequest使用的相同解析来避免警报。这样,您可以在没有任何警报的情况下填充
$request.forms

修改响应HTML以覆盖警报弹出窗口

$JavascriptAlertOverride = @"
// Override window.alert
  window.alert = function() {
    // do nothing here
  };

// Override alert
  alert = function() {
    // do nothing here
  };
"@
$NonAlertingHTML = $Request.Content -replace "<head>", "<head><script type='text/javascript'>$JavascriptAlertOverride</script>"

我想这就是我从一些随机人的网站上得到的。我编辑了指向一个非ssl网站的链接,该网站演示了这种行为。不幸的是,它没有使用powershell的事件处理程序,所以我无法捕获它。@JacobColvin上一个链接在powershell中生成了错误。如果你得到的是一个窗口,那么它就不同了但是仍然可以用try和catch块捕获。我会更新答案。你能解释一下为什么
-UseBasicParsing
不适合你吗?
-UseBasicParsing
不会填充
$request.Forms
,这意味着我必须实现HTML/JS解析来确定输入字段。@JacobColvin现在我明白了你想做什么…:)而且你的尝试/捕获没有捕获任何东西。输出$x或$x的任何子项,窗口仍然会出现。您能详细说明一下为什么
-UseBasicParsing
对您不可用吗?@oɔǝɹ
-UseBasicParsing
将不会填充
$request.Forms
,这意味着我必须实现HTML/JS解析来确定输入字段。啊,那么你想遍历表单/字段吗?@oɔɯǝɹ确实如此,尽管我认为这与问题不太相关,真的。我觉得这应该是可以解决的,而不只是为我的具体案例创建一个变通方法。也许使用
-UseBasicParsing
将HTML下载到本地文件,并解析使用DOM是一个选项?你没有正确阅读操作。引用:“-UseBasicParsing在我的情况下不是一个选项。”我确实读过它,但我也读过他关于为什么他认为不能使用它的评论”-UseBasicParsing不会填充$request.Forms,这意味着我必须实现HTML/JS解析以确定输入字段”这意味着他不知道他不必实现自己的解析。他可以使用修改响应后调用WebRequest的解析引擎。不过,我会尝试在回答中澄清这一点,如果他碰巧在2.0上,那么我会写另一个选项,其中-UseBasicParsing实际上不是一个选项。最后,我必须将它授予@tukan,但通过一些额外的工作,我认为这是一个很好的解决方案。您仍然需要解析树,所以我想这取决于HTMLDocument将如何构造不同的树。我相信HtmlWebResponseObject在这里更为标准。@JacobColvin谢谢。我也投了赞成票,因为这是一个有趣的贡献。
$HTML = New-Object -ComObject "HTMLFile"
$HTML.IHTMLDocument2_write($NonAlertingHTML)
$HTML.forms

PS > $HTML.GetType()

IsPublic IsSerial Name                                     BaseType                                                                                                                  
-------- -------- ----                                     --------                                                                                                                  
True     False    HTMLDocumentClass                        System.__ComObject                                                                                                        



PS > $Request.ParsedHtml.GetType()

IsPublic IsSerial Name                                     BaseType                                                                                                                  
-------- -------- ----                                     --------                                                                                                                  
True     False    HTMLDocumentClass                        System.__ComObject