C# webBrowser 截取验证码截图的两种方式

本文介绍了在VS2008环境下,通过使用DIB位图和自定义方法解决网页验证码图片无法正常显示在PictureBox的问题。包括两种实现方式:使用DllImport调用GDI32.dll函数和通过webBrowser对象的DrawToBitmap方法。同时,文章提供了关键步骤和注意事项,如调整截取坐标以确保完整截取图片。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

本来是想把网页加载出来的验证码的图片控件<img>中的url直接放到PictureBox,但发现url是一个没有图片格式后缀的地址(或是个action),所以图片没能显示在PictureBox中。

从网上搜索相关解决办法,测试通过了其中两种。

 

环境:vs2008

 

第一种:

 

属性声明区域引入:

        [DllImport("gdi32.dll", CharSet = CharSet.Auto, SetLastError = true, ExactSpelling = true)]
        public static extern int BitBlt(HandleRef hDC, int x, int y, int nWidth, int nHeight, HandleRef hSrcDC, int xSrc, int ySrc, int dwRop);

截图方法中:

           

	int x = 10;
	int y = -20;

        //用于保存图片的位图对象           
        Bitmap bmSave = new Bitmap(220, 60);
        //创建该位图的Graphics对象    
        Graphics gSave = Graphics.FromImage(bmSave);             
        Graphics gSrc = this.webBrowser1.CreateGraphics();

        HandleRef hDcSave = new HandleRef(null, gSave.GetHdc());       
        HandleRef hDcSrc = new HandleRef(null, gSrc.GetHdc());

        BitBlt(hDcSave, x, y, 220, 60, hDcSrc, 0, 0, 0xcc0020);
        gSrc.ReleaseHdc();
        gSave.ReleaseHdc();
        bmSave.Save("d://test.png");
        gSrc.Dispose();
        gSave.Dispose();
        bmSave.Dispose();


这样PictureBox的图像地址设置为"d://test.png",就可以显示图片了。

需要说明的是起始坐标X,Y可以设置负数,这也许能让你截取图片时,找到最佳切入位置。

 

 

第二种:

 

比较简单,DrawToBitmap方法,网上也有很多举例的,但发现vs2008的webBrowser没有这个方法。通过查阅msdn介绍,发现这个方法在r它“老子”那里。

  

	ectangle rect = new Rectangle(0, 0, 220, 60);
        Bitmap bmSave1 = new Bitmap(220, 60);
        this.webBrowser1.Parent.DrawToBitmap(bmSave1, rect);
        bmSave1.Save("d://test1.png");


注意第一句的Rectangle(0, 0, 220, 60)前两个参数是0(不可以是负数,否则报错)。

问题来了,图片在网页的什么地方??幸好又碰到一位高人,把这个图片的网页元素设置到网页的左上角,如下:

 

        HtmlElement ele_pic = this.webBrowser1.Document.GetElementsByTagName("img")[0];
        ele_pic.Style = "position: absolute; z-index: 9999; top: 0px; left: 0px";


这样截取图片的起始起始位置就是0,0,从而保证完好无损的截图原图片。

以上内容中的220, 60 不用多说了,是图片的大小,这个你可以从网页中显示的图片,右键-属性得知。

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值