【问题标题】:Save or copy images from IE com object从 IE com 对象保存或复制图像
【发布时间】:2016-09-12 07:43:04
【问题描述】:

我想从网站下载图像以检查网站上通过 AJAX 加载的其他动态信息。由于该站点使用 AJAX 加载其他信息,因此我无法使用 invoke-webrequest,因为 ajax 信息未加载,或者至少我不知道如何触发它。出于这个原因,我决定使用 Application.internetexplorer 的 com 对象。

这可以遍历和触发 javascript,但我不知道如何保存 IE 窗口中显示的图片。我尝试通过 src 路径下载图像,但如前所述,图像在每次请求时都会从原始状态略有变化。我无法从 $ie.document.images 或任何其他路径中看到“保存”方法。作为最后的努力,我尝试将.png 文件作为innerHTML 或outerHTML 等输出,但也都失败了。

当我使 com 对象可见时,我可以看到图片。必须有某种方法来获取已在我的计算机上显示的图像。有谁知道我怎么能做到这一点?

不确定它是否有帮助,但这是我目前的代码:

    $url = "https://somesite.com"
    $ie = New-Object -com internetexplorer.application
    $ie.navigate($url)
    while($ie.ReadyState -ne 4) {start-sleep -seconds 1} 
    $ie.visible = $true    
    $doc = $ie.Document
    $firstImage= $doc.IHTMLDocument3_getElementById('images01')
    $secondImage = $doc.IHTMLDocument3_getElementById('images02')
    $thirdImage = $doc.IHTMLDocument3_getElementById('images03')

    #how can I save firstImage as .png?

【问题讨论】:

    标签: powershell com


    【解决方案1】:

    似乎您已经完成了大部分任务。你现在不能添加

    Invoke-WebRequest -Uri $firstImage.href -OutFile c:\temp\...
    

    可以通过创建IHTMLControlRange,添加 DOM 对象,然后在范围上使用方法 execCommand("saveas") 来替代,但这将始终显示 SaveAs... 对话框以确保安全原因。有一个相当古老的网络帖子,标题为 Save the Last GIF for Me,它可能会帮助您了解 execCommand 是如何工作的,但到目前为止我还没有通过 PowerShell 让它工作,所以 Invoke-WebRequest 方法对我来说似乎是一个更安全的选择,并且不一定会弹出您可能不想要的对话框。

    【讨论】:

    • 感谢您的帮助。不幸的是,我不能使用另一个 Web 请求,例如 Invoke-WebRequest,因为每个请求的图片都会略有变化。因此来自 IE com 对象的图片和来自 Invoke-WebRequest 的图片会有所不同。
    • 我正在尝试使用 IHTMLControlRange 但无法弄清楚。我尝试添加一个范围,传入 $firstImage,然后执行 execCommand,但没有任何内容被复制。
    • 听起来我也遇到过。这是一个猜测,但我认为这可能是因为 DOM 对象是进程外的。也许您可以编写一些 JavaScript 来创建控制范围并运行 execCommand,然后将其注入浏览器,而不是在 PowerShell 中操作 DOM。另请注意,“复制”命令可能会通过将图像放在剪贴板上来避开 GUI。
    猜你喜欢
    • 2015-04-08
    • 1970-01-01
    • 1970-01-01
    • 2013-08-01
    • 2021-04-09
    • 2014-09-26
    • 1970-01-01
    • 2016-08-07
    • 1970-01-01
    相关资源
    最近更新 更多