是否可以使用命令行通过浏览器下载图片?

是否可以使用命令行通过浏览器下载图片?

这个问题与这个问题类似: 是否可以使用 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

相关内容