Powershell:下载或保存整个ie页面的源代码

时间:2013-06-11 16:29:36

标签: html internet-explorer powershell form-submit powershell-v3.0

我有这个PS脚本,它登录到一个站点然后导航到另一个页面。

我想保存该页面的整个来源。但出于某种原因。源代码的某些部分没有出现。

$username = "myuser" 
$password = "mypass"
$ie = New-Object -com InternetExplorer.Application
$ie.visible=$true
$ie.navigate("http://www.example.com/login.shtml")
while($ie.ReadyState -ne 4) {start-sleep -m 100}
$ie.document.getElementById("username").value = "$username"
$ie.document.getElementById("pass").value = "$password"
$ie.document.getElementById("frmLogin").submit()
start-sleep 5
$ie.navigate("http://www.example.com/thislink.shtml")
$ie.Document.body.outerHTML | Out-File -FilePath c:\sourcecode.txt

这是代码的pastebin,没有遇到过 http://pastebin.com/Kcnht6Ry

2 个答案:

答案 0 :(得分:3)

导航后,再次检查“就绪状态”而不是使用睡眠状态。您使用的代码相同。

运行代码后,如果网站加载速度慢,则睡眠可能不够长。

while($ie.ReadyState -ne 4) {start-sleep -m 100}

看起来还有另外一篇关于此的帖子 innerHTML converts CDATA to comments看起来某个人在该页面上创建了一个可以清理它的功能。一旦你在代码中声明了函数

,它就会是这样的
htmlWithCDATASectionsToHtmlWithout($ie.Document.body.outerHTML) | Out-File -FilePath c:\sourcecode.txt

答案 1 :(得分:0)

我同意@tkrn关于使用while循环等待IE文档准备好的问题。为此,我建议在循环内至少使用2秒钟。

while($ie.ReadyState -ne 4) {start-sleep -s 2}

我仍然找到了一种更简单的方法来从URL中获取整个HTML源页面。这是:

$ie.Document.parentWindow.execScript("var JSIEVariable = new XMLSerializer().serializeToString(document);", "javascript")
$obj = $ie.Document.parentWindow.GetType().InvokeMember("JSIEVariable", 4096, $null, $ie.Document.parentWindow, $null)
$HTMLDoc = $obj.ToString()

现在,$ HTMLDoc将整个HTML源页面保持不变,您可以将其保存为html文件。