WebBrowser抓图示例——截取网页上的验证码图片

WebBrowser抓图示例——截取网页上的验证码图片

只需要直接通过WebBrowser截图,并将验证码以外的部分裁剪掉,就可以了。

首先要分析一下要获取的验证图片元素特征:

image_1a645ba8-d109-4a13-9b46-7a0bc779f01d.png

这里很简单,我们只要找到src属性为“RandomImage.aspx”结尾的图片,就找到我们所需的这个元素了。

找到这个元素之后,为了方便确定其位置,并确保其不会超出WebBrowser可视范围,我们要为它赋予一个内联样式,使之处于页面的绝对左上角,并设置z-index为9999,以避免被其他元素覆盖,这个样式即为:

"position: absolute; z-index: 9999; top: 0px; left: 0px"

这之后就可以通过WebBrowser的DrawToBitmap方法截图了,截图的宽和高可通过上述元素的ClientRectangle属性取得。

实现

那么现在建立一个WinForm项目来做测试,设计如下界面:

image_dd310927-b48a-4f84-8740-ebe42d0faf76.png

然后为按钮编写事件处理函数:

private void button1_Click(object sender, EventArgs e)

{

var wb = new WebBrowser();

wb.Navigate("http://www.jcard.cn/Charge/UCardDirectCharge.aspx?category=AAWYVVWYKV&product=AAWYVVWYKV010CV");

//等待加载完毕

while (wb.ReadyState < WebBrowserReadyState.Complete) Application.DoEvents();

//遍历寻找验证图像所在元素

foreach (HtmlElement f in wb.Document.Images)

{

if (f.GetAttribute("src").ToLower().EndsWith("randomimage.aspx"))

{

//将元素绝对定位到页面左上角

f.Style. = "position: absolute; z-index: 9999; top: 0px; left: 0px";

//抓图

var b = new Bitmap(f.ClientRectangle.Width, f.ClientRectangle.Height);

wb.DrawToBitmap(b, new Rectangle(new Point(), f.ClientRectangle.Size));

pictureBox1.Image = b;

break;

}

}

}

编译并运行以测试:

image_ffea39df-4d20-44ef-9323-106a9c7de2aa.png

点击按钮,稍等片刻,即可在PictureBox中显示出完整的验证码图片了。

提示

WebBrowser的DrawToBitmap方法是隐藏的,不受智能感知提示支持,我不知道为什么会这样,但我知道DrawToBitmap方法确实存在问题,就是截图出来全白现象,据我观察,发生这种现象和是否显示WebBrowser控件有关,只要在窗体上显示了WebBrowser控件,截图出来就是全白,而如果不将WebBrowser加载到窗体,截图就是正常的,具体原因不明,只能再次感叹WebBrowser这个强大的控件编写的也太粗滥了。

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/23109131/viewspace-687646/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/23109131/viewspace-687646/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值