大家来找茬,12306更换验证码及验证码的识别

admin 发布时间:2015-03-16 分类:.NET 阅读:6232次 添加评论

今天看到12306更换验证码了,完全就是活脱脱的大家来找茬啊。

之前自己也研究过OCR验证码识别,特别留意过12306的验证码,我记得之前就更换过了一次。前两次的验证码确实不难,我用Google的开源OCR项目tesseract-ocr就可以识别出12306的验证码,调试过的识别率也挺高。

下面是识别的主要代码:

public static string Login(string UserName, string Password, string ValidateCode)

        {

            string Html = GetHtml("http://songker.com/");

            Dictionary<string, string> parameters = new Dictionary<string, string>();

            parameters.Add("__EVENTTARGET", "");

            parameters.Add("__EVENTARGUMENT", "");

            Match mVIEWSTATE = Regex.Match(Html, @"id=""__VIEWSTATE""[\s\S]*?value=""([\s\S]*?)""");

            if (mVIEWSTATE.Success)

            {

                //parameters.Add("__VIEWSTATE", “aspx页面上的__VIEWSTATE”));

                parameters.Add("__VIEWSTATE", "aspx页面上的__VIEWSTATE");

            }

            Match mEVENTVALIDATION = Regex.Match(Html, @"id=""__EVENTVALIDATION""[\s\S]*?value=""([\s\S]*?)""");

            if (mEVENTVALIDATION.Success)

            {

                //parameters.Add("__EVENTVALIDATION", "__EVENTVALIDATION");

                parameters.Add("__EVENTVALIDATION", "__EVENTVALIDATION");

            }

            parameters.Add("Account", UserName);

            parameters.Add("PWD", UserName);

            parameters.Add("CheckCode", ValidateCode);

            ..........



            string url = "http://songker.com/login.aspx";

            HttpWebResponse response = Http.CreatePostHttpResponse(url, parameters, null, null, Encoding.UTF8, cookie.GetCookie());

            if (response == null)

            {

                return "网络问题";

            }

            string result = string.Empty;

            using (StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.Default))

            {

                try

                {

                    cookie.SetCookie(response.Headers["Set-Cookie"]);

                    result = reader.ReadToEnd();

                    reader.Close();

                }

                catch (Exception e)

                {

                }

            }

            if (string.IsNullOrEmpty(result))

            {

                return "网络问题";

            }

            else if (result.Contains("用户名或密码错误"))

            {

                return "用户名或密码错误";

            }

            else if (result.Contains("验证码不正确,请重新输入"))

            {

                return "验证码不正确,请重新输入";

            }

            else

            {

                //Match user = Regex.Match(result, "<span id=\"result\">(?<Text>[^>]*?)</span>");

                if (user.Success)

                {

                    return "成功";

                }

                else

                {

                    return "异常";

                }

            }

        }


关键字词: 验证码识别OCR12306

暂无留言

发表评论:

◎欢迎您的参与讨论。