如何从Webbrowser控件获取验证码图像?是一个Image对象

时间:2016-11-28 04:13:30

标签: c# webbrowser-control

它的验证码图片。 所以请不要通过网址回答下载。

作为一些错误,"复制命令"有时只是复制网址,而不是图片。 所以请不要使用IHTMLControlRange.exec命令解决问题。

有些网站不是HTML5页面。 所以请不要通过canvas标签来回答。

.... 还有别的吗?

2 个答案:

答案 0 :(得分:0)

好吧,如果您使用的是Winforms,您可以使用图形对象截取WebBroser控件中呈现的所有内容的屏幕截图。

以下是您可以这样做的方法:

Map<Subject, List<Student>> map = new HashMap<>();

我们很清楚,Bitmap是System.Drawing.Image的特定实现。

答案 1 :(得分:0)

好的......我正试着下载......它有效!

使用与浏览器控件中的页面相同的参数伪造请求。

var hRequest = WebRequest.CreateHttp("/*Rand Code Url*/?rnd=" + new Random().NextDouble());
hRequest.Accept = "image/png, image/svg+xml, image/jxr, image/*; q=0.8, */*; q=0.5";
hRequest.Headers.Add(HttpRequestHeader.AcceptEncoding, "gzip, deflate");
hRequest.Headers.Add(HttpRequestHeader.AcceptLanguage, /*Page AcceptLanguage*/);
hRequest.KeepAlive = true;
string cookie = "";
webBrowser.Invoke((MethodInvoker)delegate { cookie = webBrowser.Document.Cookie; });
hRequest.Headers.Add(HttpRequestHeader.Cookie, cookie);
hRequest.Headers.Add("DNT", "1");
hRequest.Host = /*page window.location.host*/;
hRequest.Referer = /*page.referer*/;
hRequest.UserAgent = /*page navigator.userAgent*/;
hRequest.Method = "GET";
var hResponse = hRequest.GetResponse();
var response = hResponse.GetResponseStream();
List<byte> data = new List<byte>();
//read stream
while (true)
{
    int i = response.ReadByte();
    if (i >= 0)
        data.Add((byte)i);
    else
        break;
}
if (data.Count == 0) return "";//if not succes, return empty string
//convert to Base64 string
string RandBase64 = Convert.ToBase64String(data.ToArray());
hResponse.Dispose();