这个问题与这个问题类似: 是否可以使用 Windows 命令行下载?,但有一点不同,因为浏览器是唯一允许访问互联网的程序,所以它是唯一可用的选项。据我所知,答案是“没办法”。我尝试了类似以下方法:
"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe" http://website.com/remotepicture.jpg > ./localfile.jpg
但毫不奇怪的是,我只得到了一个空文件。
然后我尝试使用本地 html 文件,但又遇到了与 CORS 相关的另一个死胡同:仍然得到一个空文件。
<!DOCTYPE html>
<html>
<head>
<META HTTP-EQUIV="Refresh" CONTENT="600">
</head>
<body>
<script>
function forceDownload(blob, filename) {
var a = document.createElement('a');
a.download = filename;
a.href = blob;
document.body.appendChild(a);
a.click();
a.remove();
}
// Current blob size limit is around 500MB for browsers
function downloadResource(url, filename) {
if (!filename) filename = url.split('\\').pop().split('/').pop();
fetch(url, {
headers: new Headers({
'Origin': location.origin
}),
mode: 'no-cors'
})
.then(response => response.blob())
.then(blob => {
let blobUrl = window.URL.createObjectURL(blob);
forceDownload(blobUrl, filename);
})
.catch(e => console.error(e));
}
downloadResource('http://www.klevischer-verein.de/webcam/schwanenturm.jpg');
</script>
</body>
</html>
答案1
到目前为止,我认为没有我想要的解决方案(直接通过浏览器)。所以,我感谢大家的提示,特别是 DrMoishe Pippik 建议我查看浏览器缓存。最后,我编写了一个简短的 VBScript 文件,根据图片的特征(文件大小和年龄以及图片大小)查找我要查找的图片。它不是很可靠,但似乎很有效。然后我使用(非常简单的)本地 html 文件每 n 分钟缓存一次资源。以下是供将来参考的 vbs 代码:
On Error Resume Next
sOrigin = "C:\Users\xxxxxxxxx\AppData\Local\Microsoft\Edge\User Data\Default\Cache" 'Path to check for files
repeattime = 10 'check again every n minutes
maxage = 5
minsize = 50 'minimum file size in kB
maxsize = 150 'maximum file size in kB
width = 640
height = 480
Set oFileSys = WScript.CreateObject("Scripting.FileSystemObject")
Set objImage = WScript.CreateObject("WIA.ImageFile")
Set objShell = WScript.CreateObject( "WScript.Shell" )
objShell.Run("cmd.exe /C peek.html") 'launch the browser
Set oFolder = oFileSys.GetFolder(sOrigin)
lastcheck = Now
Do
For Each oFile In oFolder.Files
'only files not older than [maxage] minutes
If (DateDiff("n", oFile.DateLastModified,lastcheck) < maxage) Then ' Or use DateCreated, if you wish
'only files between the limits
If (oFile.Size > minsize*1024 And oFile.Size < maxsize*1024) Then
'check if it is an image
oFileSys.CopyFile oFile.Path, ".\pictures\image.jpg", True
objImage.LoadFile ".\pictures\image.jpg"
If (Err.Number <> 0 Or objImage.Width <> width Or objImage.Height <> height) Then
oFileSys.DeleteFile ".\pictures\image.jpg"
Err.Clear
Else
Exit For
End If
End If
End If
Next
lastcheck = Now
WScript.Sleep 1000*60*repeattime
Loop