转帖 做验证码识别 用的到 WebBrowser抓图示例——截取网页上的验证码图片
来源:互联网 发布:淘宝长袖套裙小西装 编辑:程序博客网 时间:2024/04/29 13:07
WebBrowser抓图示例——截取网页上的验证码图片
只需要直接通过WebBrowser截图,并将验证码以外的部分裁剪掉,就可以了。
首先要分析一下要获取的验证图片元素特征:
这里很简单,我们只要找到src属性为“RandomImage.aspx”结尾的图片,就找到我们所需的这个元素了。
找到这个元素之后,为了方便确定其位置,并确保其不会超出WebBrowser可视范围,我们要为它赋予一个内联样式,使之处于页面的绝对左上角,并设置z-index为9999,以避免被其他元素覆盖,这个样式即为:
"position: absolute; z-index: 9999; top: 0px; left: 0px"
这之后就可以通过WebBrowser的DrawToBitmap方法截图了,截图的宽和高可通过上述元素的ClientRectangle属性取得。
实现
那么现在建立一个WinForm项目来做测试,设计如下界面:
然后为按钮编写事件处理函数:
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;
}
}
}
编译并运行以测试:
点击按钮,稍等片刻,即可在PictureBox中显示出完整的验证码图片了。
提示
WebBrowser的DrawToBitmap方法是隐藏的,不受智能感知提示支持,我不知道为什么会这样,但我知道DrawToBitmap方法确实存在问题,就是截图出来全白现象,据我观察,发生这种现象和是否显示WebBrowser控件有关,只要在窗体上显示了WebBrowser控件,截图出来就是全白,而如果不将WebBrowser加载到窗体,截图就是正常的,具体原因不明,只能再次感叹WebBrowser这个强大的控件编写的也太粗滥了。
================================================
//根据Name获取元素
public HtmlElement GetElement_Name(WebBrowser wb,string Name)
{
HtmlElement e = wb.Document.All[Name];
return e;
}
//根据Id获取元素
public HtmlElement GetElement_Id(WebBrowser wb, string id)
{
HtmlElement e = wb.Document.GetElementById(id);
return e;
}
//根据Index获取元素
public HtmlElement GetElement_Index(WebBrowser wb,int index)
{
HtmlElement e = wb.Document.All[index];
return e;
}
//获取form表单名name,返回表单
public HtmlElement GetElement_Form(WebBrowser wb,string form_name)
{
HtmlElement e = wb.Document.Forms[form_name];
return e;
}
//设置元素value属性的值
public void Write_value(HtmlElement e,string value)
{
e.SetAttribute("value", value);
}
//执行元素的方法,如:click,submit(需Form表单名)等
public void Btn_click(HtmlElement e,string s)
{
e.InvokeMember(s);
}
- 转帖 做验证码识别 用的到 WebBrowser抓图示例——截取网页上的验证码图片
- delphi WebBrowser控件上网页验证码图片识别教程(一)
- C#利用WebBrowser截取验证码图片
- 用c++实现获取ie网页的验证码图片识别后输入到验证码框
- C# WebBrowser 抓图获取网页验证码
- C# WebBrowser 抓图获取网页验证码
- C# WebBrowser 抓图获取网页验证码
- C# webBrowser 截取验证码截图的两种方式
- C#利用WebBrowser截取验证码图片 识别率一半
- asp.net做的验证码识别
- 请问用VC怎么把文字绘到图片中?就像网页上的那些验证码一样
- 网址收藏 、验证码图片的识别
- CSDN图片验证码的识别代码
- 用于验证码图片识别的类
- 简单图片数字验证码的识别
- 图片验证码的一般识别过程
- 基于Python的Selenium自动化— 实现验证码截取并识别
- 验证码的识别
- STL容器使用方法
- 用IPsec/Openswan连接各地机房的内网
- Hibernate3.3 教程
- 个人学习杂谈
- 27款经典的CSS框架
- 转帖 做验证码识别 用的到 WebBrowser抓图示例——截取网页上的验证码图片
- R400 A73安装windows XP 全过程
- 安装和配置魔灯(Moodle)
- linux下使用c++语言对mysql数据库操作
- MyEclipse8.5插件FindBugs的安装
- fur render(毛发渲染)
- 计算机比人类,更容易交往
- 根据表中记录的变化情况自动维护作业
- parent是当前的意思