[英]How to get verification code image from Webbrowser control? Be an Image object
这是验证码图片。 因此,请不要回答通过url下载。
作为一些错误,“复制命令”有时仅复制url,而不是图像。 因此,请不要使用IHTMLControlRange.execCommand方法来回答。
某些网站不是HTML5页面。 因此,请不要回答通过canvas标签获取它。
....还有其他方法吗?
好吧,如果您使用的是Winforms,则可以使用图形对象截取WebBroser控件中正在渲染的所有内容的屏幕快照。
这是您可以执行的操作:
private void CaptureImage()
{
int width, height;
width = webBrowser1.ClientRectangle.Width;
height = webBrowser1.ClientRectangle.Height;
using (Bitmap image = new Bitmap(width, height))
{
using (Graphics graphics = Graphics.FromImage(image))
{
Point p, upperLeftSource, upperLeftDestination;
p = new Point(0, 0);
upperLeftSource = webBrowser1.PointToScreen(p);
upperLeftDestination = new Point(0, 0);
Size blockRegionSize = webBrowser1.ClientRectangle.Size;
graphics.CopyFromScreen(upperLeftSource, upperLeftDestination, blockRegionSize);
}
//saveout the image
var path = System.IO.Path.Combine(System.Environment.CurrentDirectory, "image.png");
image.Save(path, System.Drawing.Imaging.ImageFormat.Png);
}
}
只是我们很清楚, 位图是System.Drawing.Image的特定实现。
好的...我正在尝试下载...并且可以使用!
只需使用与浏览器控件中的页面相同的参数来伪造请求。
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();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.