如何编程登录有验证码的网站
看到论坛有人在问如何编程登录有验证码的网站题,于是专门研究了一下。文章后有源码下载地址。
注:验证码还是要人来辨认。
有几种处理办法,一是使用WebBrowser控件,一是使用WebClient或者WebRequest控件来处理。
本文中使用 WebBrowser 控件。
(以CSDN登录为例)
这里有两个难点:
1,如何获得验证码的图片。
2,如果模拟表单提交。
先做一些准备工作,即通过察看登录页的源码码,查出用户名等控件的name.
验证码的控件的name是MzImgExpPwd
提交按钮是一个图片,name是 ctl00$CPH_Content$Image_Login
添加引用 Microsft.mshtml
获得验证码的关键代码
HTMLDocument html = (HTMLDocument)this.webBrowser1.Document.DomDocument; HtmlElement elm = (HtmlElement)webBrowser1.Document.All["MzImgExpPwd"]; IHTMLControlElement img = (IHTMLControlElement)elm.DomElement; IHTMLControlRange range = (IHTMLControlRange)((HTMLBody)html.body).createControlRange(); range.add(img); range.execCommand("Copy", false, null); img = null; range = null; html = null; if(Clipboard.ContainsImage()) { this.pictureBox1.Image = Clipboard.GetImage(); } else { MessageBox.Show("执行不成功"); } Clipboard.Clear();
提交的关键代码
webBrowser1.Document.All["ctl00$CPH_Content$tb_LoginNameOrLoginEmail"].InnerText = textBox1.Text; webBrowser1.Document.All["ctl00_CPH_Content_tb_Password"].InnerText = textBox2.Text; webBrowser1.Document.All["ctl00$CPH_Content$tb_ExPwd"].InnerText = textBox3.Text; webBrowser1.Document.All["ctl00$CPH_Content$Image_Login"].InvokeMember("click");