如何在WatIn中保存动态图像

时间:2014-12-16 10:35:49

标签: c# .net httprequest watin

我正在尝试保存每次请求动态动态的图片。

我尝试了WatIn和HttpWebRequest(获取新图片)

HttpWebRequest request = (HttpWebRequest)WebRequest.Create("www.test.com");
request.AllowAutoRedirect = false;
WebResponse response = request.GetResponse();

using (Stream stream = response.GetResponseStream())
using (FileStream fs = File.OpenWrite(ImageCodePath))
{
    byte[] bytes = new byte[1024];
    int count;

    while ((count = stream.Read(bytes, 0, bytes.Length)) != 0)
    {
        fs.Write(bytes, 0, count);
    }
}

和(User32.dll)URLDownloadToFile(获取新图片)

[DllImport("urlmon.dll", CharSet = CharSet.Auto, SetLastError = true)]
static extern Int32 URLDownloadToFile(Int32 pCaller, string szURL, string szFileName, Int32 dwReserved, Int32 lpfnCB);
 URLDownloadToFile(0, "https://test.reporterImages.php?MAIN_THEME=1", ImageCodePath, 0, 0);

我查看了所有临时文件夹但仍找不到图像。

Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.InternetCache),"Content.IE5");

每当我尝试保存它时,服务器都会构建一个新图像并将其返回。如果我右键单击图像并选择:

  

将图片另存为...

它会保存图片。我需要以某种方式在IE中的WatIn中实现此方法(右键单击,将图片另存为...),或以某种方式从我的HTML页面使用HttpRequest下载它而无需服务器交互。

有谁知道我该怎么做?

2 个答案:

答案 0 :(得分:2)

据我了解,我的想法是在浏览器页面上捕获当前的CAPTCHA图像以通过一些文本识别来绕过它(顺便说一句,奇怪的想法)。获取图像网址没有问题(它总是一样的)。在这种情况下,您可以使用API​​访问浏览器缓存。 专门针对IE FindFirstUrlCacheEntry / FindNextUrlCacheEntry 如果您的应用程序托管WebBrowser,它可以提供帮助。

答案 1 :(得分:0)

使用WebClient

 using (var client = new WebClient())
 {
     client.DownloadFile("http://cdn.sstatic.net/stackoverflow/img/sprites.png?v=3c6263c3453b", "so-sprites.png");
 }

如果您提供包含html的{​​{1}}页面的网址,而不是直接发布到图像,则仍可以使用连续两次请求的网络客户端。首先是从页面源中删除图像URL(如果url是静态的,则不需要),然后实际下载图像。

编辑:

对不起。从一开始就不清楚。因此,您在应用中托管浏览器,并在其中看到实际图像。您想要下载您正在看到的图像。当然,提出另一个请求不会起作用,因为会生成另一个图像。

解决方案取决于您使用的网络浏览器控件 对于img(System.Windows.Forms),您可以使用WebBrowser。见这里的例子:

Saving image shown in web browser