OpenCV图片验证码识别与滑块验证码识别
目录
图片验证码识别:
一、百度OCR文字识别云服务
二、维普网获取图片验证码
三、维普网opencv+ocr识别验证码
四、维普网selenium登录并获取数据
滑块验证码:
五、猎聘网获取滑块验证码
六、猎聘网opencv计算滑动距离
七、猎聘网selenium模拟滑动轨迹
图片验证码识别:
一、百度OCR文字识别云服务
百度云-产品-搜索:文字识别-通用场景文字识别-立即使用-开通(实名认证)-免费尝鲜-创建新应用-调用服务-通用场景文字识别(高精度版)-复制相关代码
需要终端安装base64:pip install pybase64
import requests
import base64host = 'https://aip.baibubce.com/pauth/2.0/token?grant_type=client_credentials&client_id=[官网获取的AK]&client_secret=[官网获取的SK]'
response = requests.get(host)
if response:access_token = reponse.json()["access_token"]print(access_token)request_url = "https://aip.baidubce.com/rest/2.0/ocr/v1/accurate_basic"
# 二进制方式打开图片文件
f = open('[本地文件]', 'rb')
img = base64.b64encode(f.read())params = {"image":img}
# access_token = '[调用鉴权接口获取的token]'
request_url = request_url + "?access_token=" +access_token
headers = {'content-type': 'application/x-www-form-urlencoded'}
response = requests.post(request_url, data=params, headers=headers)
if response:print(response.json()["words_result"][0]["words"])
二、维普网获取图片验证码
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver import ActionChains
import time
import cv2
import requestsservice = Service(executable_path="../_resources/chromedriver")
driver = webdriver.Chrome(service=service)
driver.get("http://my.cqvip.com/login")
time.sleep(1)img = driver.find_element(By.XPATH, '//*[@id="verifycode"]')
img.screenshot("./img/captcha.png")time.sleep(1)
driver.quit()
三、维普网opencv+ocr识别验证码
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver import ActionChains
import json
import time
import cv2
import requests
import base64service = Service(executable_path="../_resources/chromedriver")
driver = webdriver.Chrome(service=service)
driver.get("http://my.cqvip.com/login")
time.sleep(1)img = driver.find_element(By.XPATH, '//*[@id="verifycode"]')
img.screenshot("./img/captcha.png")img = cv2.imread('./img/captcha.png', flags=cv2.IMREAD_GRAYSCALE)
thresh, img = cv2.threshold(img, 150, 255, cv2.THRESH_BINARY)
cv2.imwrite("./img/captcha2.png", img)host = 'https://aip.baibubce.com/oauth/2.0/token?client_id=xxxxxx&client_secret=xxxxxx&grant_type=client_credentials'
payload = ""
headers = {'Content-Type': 'application/json','Accept': 'application/json'
}
response = requests.request("Post", url, headers=headers, data=payload)
access_token = reponse.json()["access_token"]request_url = "https://aip.baidubce.com/rest/2.0/ocr/v1/accurate_basic"
f = open('./img/captcha2.png', 'rb')
img = base64.b64encode(f.read())params = {"image":img}
request_url = request_url + "?access_token=" +access_token
headers = {'content-type': 'application/x-www-form-urlencoded'}
response = requests.post(request_url, data=params, headers=headers)
if response:print(response.json()["words_result"][0]["words"])time.sleep(1)
driver.quit()
四、维普网selenium登录并获取数据
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver import ActionChains
import json
import time
import cv2
import requests
import base64service = Service(executable_path="../_resources/chromedriver")
driver = webdriver.Chrome(service=service)
driver.get("http://my.cqvip.com/login")
time.sleep(1)username = driver.find_element(By.XPATH, '//*[@id="txtLoginUserName"]')
ActionChains(driver).pause(0.5).click(username).send_keys("xxxxx").perform()password = driver.find_element(By.XPATH, '//*[@id="txtLoginPass"]')
ActionChains(driver).pause(0.5).click(password).send_keys("xxxxx").perform()while driver.current_url == "http://my.cqvip.com/login":img = driver.find_element(By.XPATH, '//*[@id="verifycode"]')img.screenshot("./img/captcha.png")img = cv2.imread('./img/captcha.png', flags=cv2.IMREAD_GRAYSCALE)thresh, img = cv2.threshold(img, 150, 255, cv2.THRESH_BINARY)cv2.imwrite("./img/captcha2.png", img)host = 'https://aip.baibubce.com/oauth/2.0/token? client_id=xxxxxx&client_secret=xxxxxx&grant_type=client_credentials'payload = ""headers = {'Content-Type': 'application/json','Accept': 'application/json'}response = requests.request("Post", url, headers=headers, data=payload)access_token = reponse.json()["access_token"]request_url = "https://aip.baidubce.com/rest/2.0/ocr/v1/accurate_basic"f = open('./img/captcha2.png', 'rb')img = base64.b64encode(f.read())params = {"image":img}request_url = request_url + "?access_token=" +access_tokenheaders = {'content-type': 'application/x-www-form-urlencoded'}response = requests.post(request_url, data=params, headers=headers)if response:result = response.json()["words_result"][0]["words"]print(result)cap = driver.find_element(By.XPATH, '//*[@id="validatecode"]')cap.clear()ActionChains(driver).pause(0.5).click(cap).send_keys(result).perform()submit = driver.find_element(By.XPATH, '//*[@id="btnAccountLogin"]')submit.click()time.sleep(4)print(driver.page_source)time.sleep(1)
driver.quit()
滑块验证码:
五、猎聘网获取滑块验证码
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver import ActionChains
import cv2
import time
import requests
import numpyservice = Service(executable_path="../_resources/chromedriver")
driver = webdriver.Chrome(service=service)
driver.get("http://www.liepin.com/")
time.sleep(1)select = driver.find_element(By.XPATH, '//*[@id="home-banner-login-container"]/div/div/div/div/div[2]/div/div[2]')
select.click()username = driver.find_element(By.XPATH, '//*[@id="login"]')
ActionChains(driver).pause(0.5).click(username).send_keys("xxxxx").perform()password = driver.find_element(By.XPATH, '//*[@id="pwd"]')
ActionChains(driver).pause(0.5).click(password).send_keys("xxxxx").perform()clickable = driver.find_element(By.XPATH, '//*[@id="home-banner-login-container"]/div/div/div/div/div[4]/div/label/span[1]/input')
ActionChains(driver).pause(0.5).click(clickable).perform()submit = driver.find_element(By.XPATH, '//*[@id="home-banner-login-container"]/div/div/div/div/div[3]/div/form/button')
ActionChains(driver).pause(0.5).click(submit).perform()time.sleep(2)
driver.switch_to.frame("tcaptcha_iframe")back = driver.find_element(By.XPATH, '//*[@id="slideBg"]').get_attribute("src")
res_back = requests.get(back)
with open("./img2/back.png", "wb") as f:f.write(res_back.content)front = driver.find_element(By.XPATH, '//*[@id="slideBlock"]').get_attribute("src")
res_front = requests.get(front)
with open("./img2/front.png", "wb") as f:f.write(res_front.content)time.sleep(3)
driver.quit()
六、猎聘网opencv计算滑动距离
import cv2
import numpyback = cv2.imread('./img2/back.png', flags=cv2.IMREAD_GRAYSCALE)
front = cv2.imread('./img2/front.png', flags=cv2.IMREAD_GRAYSCALE)front = front[24:front.shape[0]-24, 24:front.shape[0]-24]thresh, back = cv2.threshold(back, 110, 255, cv2.THRESH_BINARY)
thresh, front = cv2.threshold(front, 40, 255, cv2.THRESH_BINARY_INV)cv2.imwrite('./img2/back2.png', back)
cv2.imwrite('./img2/front2.png', front)match = cv2.matchTemplate(back, front, cv2.TM_CCORR_NORMED)
distance = cv2.minMaxLoc(match)[3][0]
print(distance)# cv2.imshow("back", back)
# cv2.imshow("front", front)# cv2.waitKey(0)
# cv2.destroyAllWindows()
七、猎聘网selenium模拟滑动轨迹
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver import ActionChains
import cv2
import time
import requests
import numpyservice = Service(executable_path="../_resources/chromedriver")
driver = webdriver.Chrome(service=service)
driver.get("http://www.liepin.com/")
time.sleep(1)select = driver.find_element(By.XPATH, '//*[@id="home-banner-login-container"]/div/div/div/div/div[2]/div/div[2]')
select.click()username = driver.find_element(By.XPATH, '//*[@id="login"]')
ActionChains(driver).pause(0.5).click(username).send_keys("xxxxx").perform()password = driver.find_element(By.XPATH, '//*[@id="pwd"]')
ActionChains(driver).pause(0.5).click(password).send_keys("xxxxx").perform()clickable = driver.find_element(By.XPATH, '//*[@id="home-banner-login-container"]/div/div/div/div/div[4]/div/label/span[1]/input')
ActionChains(driver).pause(0.5).click(clickable).perform()submit = driver.find_element(By.XPATH, '//*[@id="home-banner-login-container"]/div/div/div/div/div[3]/div/form/button')
ActionChains(driver).pause(0.5).click(submit).perform()time.sleep(2)
driver.switch_to.frame("tcaptcha_iframe")while driver.current_url == "https://www.liepin.com/":refresh = driver.find_element(By.XPATH, '//*[@id="reload"]/div')refresh.click()time.sleep(1)back = driver.find_element(By.XPATH, '//*[@id="slideBg"]').get_attribute("src")res_back = requests.get(back)with open("./img2/back.png", "wb") as f:f.write(res_back.content)front = driver.find_element(By.XPATH, '//*[@id="slideBlock"]').get_attribute("src")res_front = requests.get(front)with open("./img2/front.png", "wb") as f:f.write(res_front.content)back = cv2.imread('./img2/back.png', flags=cv2.IMREAD_GRAYSCALE)front = cv2.imread('./img2/front.png', flags=cv2.IMREAD_GRAYSCALE)front = front[24:front.shape[0]-24, 24:front.shape[0]-24]thresh, back = cv2.threshold(back, 110, 255, cv2.THRESH_BINARY)thresh, front = cv2.threshold(front, 40, 255, cv2.THRESH_BINARY_INV)cv2.imwrite('./img2/back2.png', back)cv2.imwrite('./img2/front2.png', front)match = cv2.matchTemplate(back, front, cv2.TM_CCORR_NORMED)distance = cv2.minMaxLoc(match)[3][0]# 341:滑动验证码图片的长, 680:下载后图片的长, 37:滑块现在距离滑动验证码图片最左端的距离distance = distance * 341 // 680 - 37print(distance)slider = driver.find_element(By.XPATH, '//*[@id="tcaptcha_drag_thumb"]')ActionChains(driver).pause(0.2).click_and_hold(slider).pause(0.2).move_by_offset(distance / 4, 5).perform() ActionChains(driver).pause(0.1).move_by_offset(distance / 2, -2).perform()ActionChains(driver).pause(0.1).move_by_offset(distance / 4, 3).release().perform()time.sleep(3)driver.get("https://www.liepin.com/")
time.sleep(1)
print(driver.page_source)time.sleep(3)
driver.quit()
相关文章:
OpenCV图片验证码识别与滑块验证码识别
目录 图片验证码识别: 一、百度OCR文字识别云服务 二、维普网获取图片验证码 三、维普网opencvocr识别验证码 四、维普网selenium登录并获取数据 滑块验证码: 五、猎聘网获取滑块验证码 六、猎聘网opencv计算滑动距离 七、猎聘网selenium模拟滑…...
网络安全深入学习第八课——代理与端口转发
文章目录 一、什么是代理二、正向代理三、反向代理四、正向和反向代理模拟复现 一、什么是代理 代理服务器英文全称是Proxy Server,其功能就是代理网络用户去取得网络信息。 形象的说:它是网络信息的中转站。在一般情况下,我们使用网络浏览…...
11月7日,每日信息差
今天是2023年11月07日,以下是为您准备的17条信息差 第一、五粮液否认内部讨论提价传闻 第二、雷军证实小米14销量已超百万台 第三、支付宝生活号全面开放UGC入口。据了解,今年以来,支付宝生活号陆续上线了创作者中心、热点榜单等多个内容产…...
sql异常Encountered unexpected token BINARY
1.出现错误 2023-11-06 10:48:19.604 [http-nio-8091-exec-3] WARN c.b.m.e.p.i.PaginationInnerInterceptor - [autoCountSql,343] - [e322891e-de87-4d98-8456-f6448d3c165e] - optimize this sql to a count sql has exception, sql:"selects.id,s.command,s.catego…...
P1131 [ZJOI2007] 时态同步
Portal. 先找出树上以 S S S 为起点最长的一条链,然后让其他链的长度都和该链对齐即可。 维护每个结点 x x x 的子树最长链 d max ( x ) d_{\max}(x) dmax(x),则每次 DFS 求出最长链之后调整对齐的代价为 d max ( x ) − ( d max ( s o …...
springboot(ssm 旅游管理系统 旅游规划平台 Java(codeLW)
springboot(ssm 旅游管理系统 旅游规划平台 Java(code&LW) 开发语言:Java 框架:ssm/springboot vue JDK版本:JDK1.8(或11) 服务器:tomcat 数据库:mysql 5.7(或8.0ÿ…...
C++ 构造函数不能是虚函数的原因
构造函数不能被声明为虚函数的主要原因涉及到对象的创建和初始化过程以及虚函数的工作机制。下面详细解释为什么构造函数不能是虚函数: 1.构造函数的调用顺序: 构造函数用于创建对象,并且对象的构造是在派生类构造函数之前完成的。当你创建…...
【LearnOpenGL基础入门——2】搭建第一个OpenGL窗口
目录 一.配置GLFW 二.配置GLAD 三.第一个OpenGL窗口 3.1 GLFW设置 3.2 GLAD设置 3.3 视口 3.4 输入 3.5渲染 在我们画出出色的效果之前,首先要做的就是创建一个OpenGL上下文(Context)和一个用于显示的窗口。然而,这些操作在每个系统上都是不一样…...
第三章:人工智能深度学习教程-人工智能与机器学习与深度学习之间的区别
人工智能基本上是通过一组规则(算法)将人类智能融入机器的机制。人工智能是两个词的组合:“人工”是指由人类或非自然物体制造的东西,“智能”是指相应地理解或思考的能力。另一个定义可能是“人工智能基本上是训练机器࿰…...
vue中 process.env 对象为空对象问题
问题:今天在处理vue项目环境问题的时候,发现直接打印 process 对象和打印 process.env 时 env 对象输出结果是不一样的,如下图所示: 在网上搜索了一番后发现还是有挺多朋友对此感到疑惑的,询问了同事,同…...
uniapp小程序v-for提示“不支持循环数据”
问题描述: 在uniapp小程序项目中使用多层for循环时,小程序端提示:uniapp v-for 暂不支持循环数据,以至于获取不到循环的数据。 <view v-for"(item,index) in list" :key"item.id"> <view v-for"child i…...
CROS错误 403 preflight 预检
预检 403 响应 Response for preflight 403 forbidden 如上图,配置了请求接口一直报错,前端看了没有什么问题,不知道哪里报错了,那么可能是后端没有设置跨域。(或者是设置了,但是可能需要换一种方式&#…...
nginx参数调优能提升多少性能
前言 nginx安装后一般都会进行参数优化,网上找找也有很多相关文章,但是这些参数优化对Nginx性能会有多大影响?为此我做个简单的实验测试下这些参数能提升多少性能。 声明一下,测试流程比较简单,后端服务也很简单&…...
用友U8 Cloud 反序列化RCE漏洞复现
0x01 产品简介 用友U8 Cloud是用友推出的新一代云ERP,主要聚焦成长型、创新型企业,提供企业级云ERP整体解决方案。 0x02 漏洞概述 用友U8 Cloud存在多处(FileManageServlet和LoginVideoServlet)反序列化漏洞,系统未将…...
acwing算法基础之数据结构--STL简介
目录 1 基础知识2 模板3 使用示例3.1 vector3.2 pair3.3 string3.4 queue 1 基础知识 无。 2 模板 vector, 变长数组,倍增的思想size() 返回元素个数empty() 返回是否为空clear() 清空front()/back() 使用时,必须判断向量类容器非空push_back()/po…...
【Python深入学习】- 书籍推荐|数据结构和算法介绍|内建集合数据类型
🌈个人主页: Aileen_0v0 🔥系列专栏:PYTHON学习系列专栏 💫"没有罗马,那就自己创造罗马~" 若把编写代码比作行军打仗,那么要想称霸沙场,不能仅靠手中的利刃,还需深谙兵法。Python是一把利刃&…...
物联网对接协议
物联网对接协议有很多种,以下是几种常见的物联网对接协议: Modbus:是一种强大的通信标准,广泛应用于工业自动化和SCADA系统,以便将仪表、传感器和执行器的信号发送回主控制器。 Modbus具有广泛的通信协议,…...
腾讯待办关停,导出的数据怎么恢复到手机上面?
相信有不少腾讯待办的用户都发现了其“业务关停通知”,确实如此,由于业务调整,腾讯待办将于2023年的12月20日全面停止运营并下架,这就表示以后我们无法继续使用它了。在腾讯待办关停之前,绝大多数用户需要做的就是及时…...
视频特效编辑软件 After Effects 2022 mac中文版介绍 (ae 2022)
After Effects 2022 mac是一款视频特效编辑软件,被称为AE,拥有强大的特效工具,旋转,用于2D和3D合成、动画制作和视觉特效等,效果创建电影级影片字幕、片头和过渡,是一款可以帮助您高效且精确地创建无数种引…...
innovus:解决报告复制时一行拆成两行的问题
我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧? innovus复制报告时一行的东西出现在两行上,解决只需要一条命令: set_table_style -no_frame_width...
多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度
一、引言:多云环境的技术复杂性本质 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时,基础设施的技术债呈现指数级积累。网络连接、身份认证、成本管理这三大核心挑战相互嵌套:跨云网络构建数据…...
业务系统对接大模型的基础方案:架构设计与关键步骤
业务系统对接大模型:架构设计与关键步骤 在当今数字化转型的浪潮中,大语言模型(LLM)已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中,不仅可以优化用户体验,还能为业务决策提供…...
设计模式和设计原则回顾
设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...
【OSG学习笔记】Day 18: 碰撞检测与物理交互
物理引擎(Physics Engine) 物理引擎 是一种通过计算机模拟物理规律(如力学、碰撞、重力、流体动力学等)的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互,广泛应用于 游戏开发、动画制作、虚…...
React Native 开发环境搭建(全平台详解)
React Native 开发环境搭建(全平台详解) 在开始使用 React Native 开发移动应用之前,正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南,涵盖 macOS 和 Windows 平台的配置步骤,如何在 Android 和 iOS…...
基于数字孪生的水厂可视化平台建设:架构与实践
分享大纲: 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年,数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段,基于数字孪生的水厂可视化平台的…...
生成 Git SSH 证书
🔑 1. 生成 SSH 密钥对 在终端(Windows 使用 Git Bash,Mac/Linux 使用 Terminal)执行命令: ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" 参数说明: -t rsa&#x…...
高危文件识别的常用算法:原理、应用与企业场景
高危文件识别的常用算法:原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件,如包含恶意代码、敏感数据或欺诈内容的文档,在企业协同办公环境中(如Teams、Google Workspace)尤为重要。结合大模型技术&…...
EtherNet/IP转DeviceNet协议网关详解
一,设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络,本网关连接到EtherNet/IP总线中做为从站使用,连接到DeviceNet总线中做为从站使用。 在自动…...
docker 部署发现spring.profiles.active 问题
报错: org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property spring.profiles.active imported from location class path resource [application-test.yml] is invalid in a profile specific resource [origin: class path re…...
