自动识别图片验证码登录
自动识别图片验证码登录
目标:从需要会有登录的网站抓取数据。
场景: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 = "登录成功!";}}
- 通过主页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实现当获取验证码失败后自动刷新验证码再次识别,直到成功后登录系统。
自动识别图片验证码登录相关推荐
- python用selenium 验证码图片_Python +Selenium解决图片验证码登录或注册问题(推荐)
1. 解决思路 首先要获得这张验证码的图片,但是该图片一般都是用的js写的,不能够通过url进行下载. 解决方案:截图然后根据该图片的定位和长高,使用工具进行裁剪 裁剪完毕之后,使用工具解析该图片. ...
- 模拟动态登录,获取cookie和图片验证码登录(AcFun和豆瓣)
#模拟登录acfun #导入第三方库 import requests import pickle from bs4 import BeautifulSoup from fake_useragent i ...
- java自动识别图片验证码插件_JMeter开发插件——图片验证码识别
我们在性能测试中总会时不时地遭遇到来自于应用系统的各种阻碍,图片验证码就是一类最常见的束缚,登录或交易时需要按照图片中的内容输入正确的验证信息后,数据才可以提交成功,这使得许多性能测试工具只能望而却步 ...
- python 识别登陆验证码图片(完整代码)_Python 实现简单图片验证码登录
如何实现,执行代码报错了 from PIL import Image from pytesseract import image_to_string, pytesseract pytesseract. ...
- 【新版12306抢票】python自动识别图片并登录12306,实现全自动抢票源代码-分享
以下代码可自动登录12306 - 包括输入用户名密码以及自动识别验证码并点击验证码登陆. 把代码稍作加工,即可变为自己的自动抢票代码: 把 userName.send_keys("xxxx ...
- Python + Selenium(九)- 解决图片验证码登录或注册问题
1. 解决思路 首先要获得这张验证码的图片,但是该图片一般都是用的js写的,不能够通过url进行下载. 解决方案:截图然后根据该图片的定位和长高,使用工具进行裁剪 裁剪完毕之后,使用工具解析该图片. ...
- 不用OCR,如何实现图片验证码的自动识别
闲暇之时偶然翻出了一个几年前用Java写的预约课程工具.看这创建时间,尘土已相当厚了. * @version $$Id: Main, v 0.1 2018/5/9 12:49 在看到她的那一刻,瞬间勾 ...
- python---POST/GET请求数据包,图片验证码自动化识别,pytesseract,模拟用户一次正常登录
python-POST/GET请求数据包,图片验证码自动化识别,pytesseract 项目内容: 模拟用户正常登录Binzcms系统,对登录Binzcms系统进行自动化识别图片验证码,使用get与p ...
- Vue 图片验证码生成
图片验证码主要用于注册,登录等提交场景中,目的是防止脚本进行批量注册.登录.灌水,相比不带图片验证的安全度有所提高,不过目前也有自动识别图片验证码的程序出现,基本都是付费识别,随之又出现了滑动验证,选 ...
最新文章
- 自动化测试框架搭建-日志-2
- Android button 居中
- GDB入门:A GDB Tutorial with Examples
- 哥尼斯堡的“七桥问题” (欧拉回路,并查集)
- 图解 Git 工作原理,看完你就懂了!
- plsql轻量版游标的使用2
- Java GridBagLayout简单电子邮件发送界面的实现
- python判断奇数_python 中x%2 x1 判断偶数奇数 性能对比
- python求多条最短路径_Python实现最短路径算法(Dijkstra's algorithm)
- VGG Pool5 Feature Map特征提取
- 洛谷P1126 机器人搬重物【bfs】
- 问题 F: 编写函数:一维数组的逆序 (Append Code)
- bootstrap日期控件 只显示 年月
- 15.go install
- ASP.NET的HTTP模块和处理程序之模块实现
- javascript 替换全部字符串
- 360云盘账号停止服务器,360云盘服务器终止为什么
- Cisco交换机密码破解
- 同方知网软件_【技巧】方格网土方计算应用技巧,值得学习!
- 机器学习和深度学习资料汇总【02】