如何使用Windows Powershell和IE11注入JavaScript

时间:2019-02-03 15:43:17

标签: javascript powershell internet-explorer-11

简单的问题。我正在使用这个:

var arrOptvals = $(this).closest('form').find('input[name="optvals[]"]').map(function (){
    return this.value; // $(this).val()
}).get();

我想在循环中添加类似$links = @("example.com", "example.net", "example.org") $IE = new-object -com internetexplorer.application $IE.visible = $true for($i = 0;$i -lt $links.Count;$i++) { $find = $links[$i] $IE.navigate2($find) } 之类的内容,以将javascript代码插入页面上的控制台(或者只是为了使其运行)。

我该如何说任务?

谢谢!

1 个答案:

答案 0 :(得分:2)

让我们谈谈添加脚本。

第一件事是COM中没有等待事件。当您运行操作时,应用程序(在本例中为IE)将运行该操作,因此Powershell无法知道操作是否完成。

在这种情况下,让我们谈谈导航。一旦运行了该命令,您将需要走开,等待导航完成,然后再继续。

幸运的是我们有属性ReadyState。 $IE.Document.ReadyState

我们将需要走走,等待 ReadyState 等于 Complete

While($IE.Document.readyState -ne 'Complete'){
    sleep -Seconds 1
}

现在该添加脚本了。没有直接向脚本添加脚本的方法。因此,我们可以通过运行javascript添加脚本来解决此问题。 $IE.Document.Script.execScript(Script Here, Script Type)

我们可以用Javascript创建一个新元素,并将该元素附加到头部。在这种情况下,请使用Google的Jquery Lib

var Script = document.createElement('script');
Script.setAttribute('src','https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js');
document.head.appendChild(Script);

现在,一旦添加脚本,我们就需要等待IE将脚本添加到页面,因此我们需要短暂的延迟。在这种情况下,我做了1秒。

我运行了一个测试,通过检查加载的alert($.fn.jquery);

来确保脚本已加载
$JS = @'
var Script = document.createElement('script');
Script.setAttribute('src','https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js');
document.head.appendChild(Script);
'@

$GetVersion = @'
    alert($.fn.jquery);
'@

$links = @("google.com")
$IE = new-object -com internetexplorer.application
$IE.visible = $true
$links | %{
    $Document = $IE.navigate2($_)
    While($IE.Document.readyState -ne 'Complete'){
        sleep -Seconds 1
    }
    $IE.Document.body.getElementsByTagName('body')
    $TEST = $IE.Document.Script.execScript($JS,'javascript')
    sleep -Seconds 1
    $IE.Document.Script.execScript($GetVersion,'javascript')
}