繁体   English   中英

如何从Webbrowser控件获取验证码图像? 成为图像对象

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM