我想从网站下载图像,以检查通过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?
答案 0 :(得分:1)
好像你大部分都在那里。你现在不能添加
Invoke-WebRequest -Uri $firstImage.href -OutFile c:\temp\...
可以通过创建IHTMLControlRange
,添加DOM对象,然后在范围内使用方法execCommand("saveas")
来替代,但这将始终显示 SaveAs ... 出于安全原因的对话框。有一篇相当古老的网站帖子标题为Save the Last GIF for Me,可能会帮助您了解execCommand
如何工作,但到目前为止,我还没有让它从PowerShell工作,所以Invoke-WebRequest方法对我来说似乎是一个更安全的赌注,并且不一定会提出你可能不想要的对话框。