-1

如何使用 VB.NET 的 Web 浏览器控件下载嵌入式图像,我们可以通过右键单击图像并执行“将图片另存为”来实现?


我正在开发一个 VB.NET 项目,该项目可以爬取特定网站并下载其内容,包括嵌入其中的任何图像。现在我的问题是,由于站点上维护的安全性,我无法使用 Web 客户端和 HTTP 请求/响应类来达到我的目的。

该网站由一些JavaScriptjQuery维护。此外,它通过在每个URL请求上跟踪的一组 cookie 和隐藏字段来维护会话。如果发现任何不连续性,则会重定向到登录页面。

我通过使用 Web 浏览器组件找到了解决此问题的方法,该组件在维护安全性方面对我很有帮助。

但是我的下一组问题是存储 HTML 源文件以外的内容,比如嵌入图像,这是我现在主要关心的问题,我相信许多软件开发人员必须面临同样的问题。

我在 C# 中找到了各种我修改过的帖子,但它对我不起作用,比如在C# 代码中保存整个网页?(带图像/格式)

另外,我有一个项目解决了Visual Basic 2005 中的 Save image from web-browser control 中的相同问题,但为此我的公司政策不允许我这样做。

如何自动化右键单击和“将图片另存为”的过程?

有没有真正的解决方案?如果没有,那么是否有任何替代解决方案,例如从临时文件夹中复制。如果是,请提供解决方案!

4

2 回答 2

0

为什么您需要实际下载图像来完成您的任务?另外,请记住,您实际上可以使用 Web 请求跟踪/发送 cookie(无需实际的浏览器控制)。您可以使用HtmlAgilityPack解析那些隐藏字段的 HTML 。

因此,我建议重新访问该路线以实现自动化,而不是尝试使用浏览器控件。

于 2012-11-03T04:33:47.473 回答
0

我没有得到第一种方法的答案,即使用 Web 浏览器组件下载,但我得到了从“临时 Internet 文件”文件夹复制的替代方法。

这是我的代码片段,它正在为我完成这项工作。

Private Function get_Image(ByVal src As String)
    '******* code for storing Images from temporary internet files folder.......
    Dim filename As String = get_File()
    Dim gifFiles As String() = Directory.GetFiles("C:\Documents and Settings\123\Local Settings\Temporary Internet Files\", "*.*", SearchOption.AllDirectories)
    Dim imgno As Integer = 0
    For Each file As String In gifFiles
        'Dim fsi As String = Directory.GetLastWriteTime(file).ToString
        If My.Computer.FileSystem.FileExists(file) And file.Contains("attachDisplay") And Not filename.Contains("File") Then  ' This is HardCoded part for my images that are having dynamic url as my base_URL/attachDisplay?_XYZ (so in temp it is storing as attachDisplay[i]; i=1,2...)
            Dim curFileDT As Date = Directory.GetLastWriteTime(file)
            If Date.Compare(lastFileDT, curFileDT) = -1 Then ' if Last file date is before than current File write time
                imgno += 1

                My.Computer.FileSystem.CopyFile(file, filename & " Img No." & imgno & file.Substring(file.LastIndexOf(".")), True)
            End If
        End If
    Next
    lastFileDT = Date.Now 'My lastFileDT variable is declared at class level and first initialization at form load.
    '*******
End Function

这不是下载图像的正确方法,但它目前正在为我完成这项工作。

于 2012-11-06T04:15:50.640 回答