自动识别图片验证码登录

目标:从需要会有登录的网站抓取数据。
场景:A网站需要会员登录才能查阅信息,A网站采用了AntiForgery防止XSRF攻击。
创建windows应用,采用webBrowser模拟加载页面,识别验证码然后登录。

1.使用webBrowser导航到登录页

string url = "https://xxxx/Login";webBrowser1.Navigate(url);

2.获取页面验证码

private Image GetCodeImage(WebBrowser wb, HtmlElement img){var doc = (HTMLDocument)wb.Document.DomDocument;var body = (HTMLBody)doc.body;var cr = (IHTMLControlRange)body.createControlRange();var hImg = img.DomElement as IHTMLControlElement;cr.add(hImg);cr.execCommand("Copy", false, null);Image CodeImage = Clipboard.GetImage();return CodeImage;}

3.识别验证码(利用百度OCR技术)

private void button4_Click(object sender, EventArgs e){var API_KEY = "***";//换上自己的keyvar SECRET_KEY = "****";//换上自己的keyvar client = new Baidu.Aip.Ocr.Ocr(API_KEY, SECRET_KEY);client.Timeout = 60000;var ms = new MemoryStream();this.pictureBox1.Image.Save(ms, ImageFormat.Bmp);//更换图片类型,gif格式无法识别var data = new byte[ms.Length];ms.Position = 0;ms.Read(data, 0, data.Length); ms.Close();var reusltString = "";// 调用通用文字识别(高精度版),可能会抛出网络等异常,请使用try/catch捕获try{var result = client.AccurateBasic(data);reusltString = result["words_result"].First["words"].ToString();}catch{}var code = TryGetCode(reusltString);this.txtCode.Text = code;if (code.Length < 4)//(4位验证码)验证失败后刷新验证码重新验证{HtmlElement name = webBrowser1.Document.GetElementById("CaptchaImage");if (name != null){name.InvokeMember("click");HtmlElement img = webBrowser1.Document.GetElementById("CaptchaImage");if (img != null){img = webBrowser1.Document.GetElementById("CaptchaImage");var FinalImage = GetCodeImage(webBrowser1, img);pictureBox1.Image = FinalImage;}}}}
private string TryGetCode(string result){if (result.Length == 4){var c = result.ToCharArray();var k = -1;result = "";for (int i = 0; i < 4; i++){if (int.TryParse(c[i].ToString(), out k)){result += $"{k}";}}}if (result.Length == 4)return result;elsereturn "";}

4.获取登录

 private void Login(){HtmlElement name = webBrowser1.Document.GetElementById("LoginID");if (name != null)name.SetAttribute("value", this.txtUserName.Text.Trim());HtmlElement pass = webBrowser1.Document.GetElementById("Password");if (pass != null)pass.SetAttribute("value", this.txtPassword.Text.Trim());HtmlElement img = webBrowser1.Document.GetElementById("CaptchaImage");if (img != null){img = webBrowser1.Document.GetElementById("CaptchaImage");var FinalImage = GetCodeImage(webBrowser1, img);pictureBox1.Image = FinalImage;}HtmlElement btnAgree = webBrowser1.Document.GetElementById("btn_OK");if (btnAgree != null){btnAgree.InvokeMember("click");this.Text = "登录成功!";}}
  1. 通过主页a标签 加载iframe页面
     if (webBrowser1.Url.AbsoluteUri == "https://h.kfun222.com/"){try{HtmlElementCollection list = webBrowser1.Document.GetElementsByTagName("a");foreach (HtmlElement a in list){if (a.GetAttribute("data-id") == "1"){a.InvokeMember("click");timer.Start();return;}}}catch{}}

小结:可以使用timer实现当获取验证码失败后自动刷新验证码再次识别,直到成功后登录系统。

自动识别图片验证码登录相关推荐

  1. python用selenium 验证码图片_Python +Selenium解决图片验证码登录或注册问题(推荐)

    1. 解决思路 首先要获得这张验证码的图片,但是该图片一般都是用的js写的,不能够通过url进行下载. 解决方案:截图然后根据该图片的定位和长高,使用工具进行裁剪 裁剪完毕之后,使用工具解析该图片. ...

  2. 模拟动态登录,获取cookie和图片验证码登录(AcFun和豆瓣)

    #模拟登录acfun #导入第三方库 import requests import pickle from bs4 import BeautifulSoup from fake_useragent i ...

  3. java自动识别图片验证码插件_JMeter开发插件——图片验证码识别

    我们在性能测试中总会时不时地遭遇到来自于应用系统的各种阻碍,图片验证码就是一类最常见的束缚,登录或交易时需要按照图片中的内容输入正确的验证信息后,数据才可以提交成功,这使得许多性能测试工具只能望而却步 ...

  4. python 识别登陆验证码图片(完整代码)_Python 实现简单图片验证码登录

    如何实现,执行代码报错了 from PIL import Image from pytesseract import image_to_string, pytesseract pytesseract. ...

  5. 【新版12306抢票】python自动识别图片并登录12306,实现全自动抢票源代码-分享

    以下代码可自动登录12306 - 包括输入用户名密码以及自动识别验证码并点击验证码登陆. 把代码稍作加工,即可变为自己的自动抢票代码: 把  userName.send_keys("xxxx ...

  6. Python + Selenium(九)- 解决图片验证码登录或注册问题

    1. 解决思路 首先要获得这张验证码的图片,但是该图片一般都是用的js写的,不能够通过url进行下载. 解决方案:截图然后根据该图片的定位和长高,使用工具进行裁剪 裁剪完毕之后,使用工具解析该图片. ...

  7. 不用OCR,如何实现图片验证码的自动识别

    闲暇之时偶然翻出了一个几年前用Java写的预约课程工具.看这创建时间,尘土已相当厚了. * @version $$Id: Main, v 0.1 2018/5/9 12:49 在看到她的那一刻,瞬间勾 ...

  8. python---POST/GET请求数据包,图片验证码自动化识别,pytesseract,模拟用户一次正常登录

    python-POST/GET请求数据包,图片验证码自动化识别,pytesseract 项目内容: 模拟用户正常登录Binzcms系统,对登录Binzcms系统进行自动化识别图片验证码,使用get与p ...

  9. Vue 图片验证码生成

    图片验证码主要用于注册,登录等提交场景中,目的是防止脚本进行批量注册.登录.灌水,相比不带图片验证的安全度有所提高,不过目前也有自动识别图片验证码的程序出现,基本都是付费识别,随之又出现了滑动验证,选 ...

最新文章

  1. 自动化测试框架搭建-日志-2
  2. Android button 居中
  3. GDB入门:A GDB Tutorial with Examples
  4. 哥尼斯堡的“七桥问题” (欧拉回路,并查集)
  5. 图解 Git 工作原理,看完你就懂了!
  6. plsql轻量版游标的使用2
  7. Java GridBagLayout简单电子邮件发送界面的实现
  8. python判断奇数_python 中x%2 x1 判断偶数奇数 性能对比
  9. python求多条最短路径_Python实现最短路径算法(Dijkstra's algorithm)
  10. VGG Pool5 Feature Map特征提取
  11. 洛谷P1126 机器人搬重物【bfs】
  12. 问题 F: 编写函数:一维数组的逆序 (Append Code)
  13. bootstrap日期控件 只显示 年月
  14. 15.go install
  15. ASP.NET的HTTP模块和处理程序之模块实现
  16. javascript 替换全部字符串
  17. 360云盘账号停止服务器,360云盘服务器终止为什么
  18. Cisco交换机密码破解
  19. 同方知网软件_【技巧】方格网土方计算应用技巧,值得学习!
  20. 机器学习和深度学习资料汇总【02】

热门文章

  1. android友盟自定义事件,友盟统计事件添加
  2. 网络编程代码实例:多进程版
  3. AGC012B Splatter Painting
  4. freeRTOS学习 — 消息邮箱
  5. 华为服务器安装nas系统,服务器 nas 配置
  6. Leetcode Day10 最长公共子序列+字符串交织
  7. 清华计算机系本科毕业起薪,大学本科毕业起薪最高的六大专业
  8. 恢复出厂设置 LED灯闪烁
  9. MySQL之——函数
  10. 把QQ聊天记录插入数据库中