我在网页上下载图片(或有时会拉链)时遇到一些问题。 我已经检查了一些关于这个主题的论坛,他们大多数时候建议使用URLDownloadToFile函数。 我试图应用它,但它似乎没有用。
以下是我正在处理的网页类型示例:
这里的类型是jpg,但有时它可以是拉链。 对于jpg案例,我有两种方法可以做到:
点击查看按钮,这将打开一个包含仅1张图片的新网页,选择该网页并以某种方式下载图片,我不会# 39;无法做到 (有一个"将图片另存为"当您手动点击图片时,但如何使用VBA访问图片?):
objIE.document.frames(1).frames(1).document.getElementById("notPrintable").document.getElementsByName("view")(0).Click 'This clicks on the View Button
attachment_url = "https://pumapgf-row.bmwgroup.net/puma/case/showfile.do?selectedIndex=" & elem_id & "&filename=" & elem_name & "%20%7C%20jpg%20%7C%20" & end_url ' this is the url of the new webpage which is opened when I click the view button
Set objIE = IEWindowFromLocation(attachment_url) ' I select the new webpage
Set IEDoc = objIE.document ' set document on it
来自这个新网页的html当然是jpg)看起来像这样: 我试图做但不成功的是以这种方式使用URLDownloadToFile函数
Dim myImages As IHTMLElementCollection
Set myImages = IEDoc.getElementsByTagName("img")
returnValue = URLDownloadToFile(0, myImages(0).href, "P:\Alex\ABC.img", 0, 0)
在运行代码之前,无论是否创建这样的被调用文件,它都没有任何区别。我也试过.jpg,。img,.png。 myImages(0).href像这样结束:
所以我不知道.href是不是以.jpg或.img这样的结尾的事实是一个问题。
点击另存为按钮:对于jpg和zip文件均有效,因此这将是一个更好的解决方案。我当然设法点击它,但问题来自互联网显示这个并且我不知道如何处理它的事实。
知道怎么做吗?
答案 0 :(得分:1)
假设您有一个有效的下载URL(我无法根据您的问题中的网站进行测试),您需要做的就是测试文件是否是jpg是要下载它并检查存在JPEG file header:
Public Function FileIsJpg(filepath As String) As Boolean
Dim handle As Long
handle = FreeFile
Open filepath For Binary As #handle
Dim header As Integer
Get #handle, , header
'Note the byte order.
If header = &HD8FF Then
Get #handle, , header
If header = &HE0FF Or header = &H1FF Then
FileIsJpg = True
End If
End If
Close #handle
End Function
请注意,对于您的使用,这将需要错误处理,因为URLDownloadToFile
仍然可以打开文件。我假设你有某种等待机制(它是一种非阻塞功能)。如果没有,您需要使用本机回调机制或猜测并使用Application.Wait
或类似的东西。
使用示例:
Private Declare Function URLDownloadToFile Lib "urlmon" _
Alias "URLDownloadToFileA" (ByVal pCaller As Long, _
ByVal szURL As String, ByVal szFileName As String, _
ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long
Private Const S_OK As Long = 0
Sub Examples()
Const TestJpgUrl As String = "https://www.gstatic.com/webp/gallery/1.jpg"
Const TestPngUrl As String = "https://www.gstatic.com/webp/gallery3/1.png"
Dim target As String
target = Environ$("TEMP") & "\test.png"
If URLDownloadToFile(0, TestPngUrl, target, 0, 0) = S_OK Then
'Wait for download to complete - a callback function would be better.
Application.Wait Now + TimeSerial(0, 0, 1)
MsgBox target & ": " & FileIsJpg(target)
End If
Kill target
target = Environ$("TEMP") & "\test.jpg"
If URLDownloadToFile(0, TestJpgUrl, target, 0, 0) = S_OK Then
Application.Wait Now + TimeSerial(0, 0, 1)
MsgBox target & ": " & FileIsJpg(target)
End If
Kill target
End Sub
请注意,您也可以用类似的方式明确测试zip files,但我会将其作为读者的练习。