【发布时间】:2017-04-19 12:20:32
【问题描述】:
我想保存网页 (ASP),就像 IE 将其保存为文本文件一样。
我找到了this 并尝试了:
$ie=New-Object -ComObject InternetExplorer.Application
$ie.Navigate($Page)
$ie.Document.execCommand("SaveAs", $false, "1.txt")
但我得到了错误:
You cannot call a method on a null-valued expression.
At line:3 char:1
+ $ie.Document.execCommand("SaveAs", $false, "1.txt")
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull
我不确定自己做错了什么。
如果我尝试通过
捕获页面$web = New-Object Net.WebClient
$web | Get-Member
$web.DownloadString($Page) | Out-File "test.html"
我得到一个页面,但它是由网站创建的错误页面,让我知道链接无效,因此只有通过 IE 会话加载它才能真正找到该页面。
我真的只需要自动将 IE 页面捕获为文本文件,我希望在不使用 SendKey 函数的情况下做到这一点。有人可以帮忙吗?
【问题讨论】:
-
可能你没有等待 IE 完成页面加载并解析 HTML 并生成 DOM,所以还没有 .Document。您通常希望
.Navigate(..)然后while ($ie.Busy -or $ie.ReadyState -ne 4) { start-sleep -Milliseconds 100 }等待它加载内容,然后再对其进行任何操作。 -
谢谢。也许就是这样,但现在它正在运行/挂起。不应该只是延迟 1/10 秒吗?
-
@TessellatingHeckler 我还在导航和 execCommand 之间尝试了
Start-Sleep 10,但得到了同样的错误。添加您建议的行仍然会永远挂起。想法? -
现在它正在运行吗?
You cannot call a method on a null-valued expression.怎么了?它不会是 1/10 秒的延迟,而是无限的延迟,因为它一直在循环中,直到 IE 报告它完成。 -
想法:你正在导航到一个“受信任的站点”,IE 正在一个新的保护模式进程中重新加载它并且你的
$iecom 对象不再指向任何东西?
标签: powershell internet-explorer