日期:2014-05-17  浏览次数:20943 次

新人求教,picturebox显示验证码的方式
最近在学习C#,想制作一个学校教务网站的登录系统,我先在form1中使用webbrowser控件打开网站,帐号和密码保存在单独一个user.txt的文件中,用webbrowser的webbrowser_documentcompleted事件在网站加载的时候自动填充。不过这和IE登录的功能一样了,我后来的想法是,仍然用webbrowser,但是把webbrowser的visial属性设置成False,用一个pictureBox来加载网站的验证码,由于帐号密码已经填充,所以输入完成验证码后只要增加一个button就可以提交了,另外的几项我已经做好了,就是不知道怎么把验证码放到picturebox里面,我尝试了好几种方法:1.用截图,我想用截图来截取这里面的一部分,保存后显示到picturebox里面,不过截图出来的一片空白;2.直接在picturebox的url里面输入验证码地址,可是这种方法的验证码肯定是无效的;3.用Savaasdialogue();方法,这种方式是最有效的,可是会弹出一个框让我们手动保存,严重影响用户体验。现在没什么好办法了,求大神指教啊。。。我们学校的网站:http://jwc.zjnu.edu.cn/cjcx/,验证码是一个asp文件

------解决方案--------------------
又开了个贴子, 用 GetUrlCacheEntryInfoW 方法获取已经在网页中显示的图片在本地的路径.
------解决方案--------------------
当webbrowser下载完毕所有文件,例如
void webBrowser1_DocumentCompleted(object sender, System.Windows.Forms.WebBrowserDocumentCompletedEventArgs e)
{
    if (webBrowser1.ReadyState == WebBrowserReadyState.Complete)
    {
         ........
    }
}

可以遍历文档中的图片,例如
foreach (HtmlElement img in this.webBrowser1.Document.Images)
{
    var src = img.GetAttribute("src");
    .......

或者是先直接查到某个DIV 后者其它 html element 内部的 Image,取得其 src,然后抛出事件通知。
------解决方案--------------------
你自己学习一下如何定义事件。你自定义的事件EventArgs子类类型,应该扩展一个 Src 属性,这样捕获事件处理的方法就能够通过 e.Src 得到图片的地址。

实际上图片可能是一个 GIF,这时候需要从下载的图片文件中找到所有各帧图片,然后找到最容易识别的一个图片,或者用多个图片做归类判断。

有些人自以为所谓的GIF图片可以防自动验证码识别,实际上那根本是蒙自己的。