10-验证-中文识别点选

news/发布时间2024/8/25 16:59:36

image-20231207092150833

image-20231207092214884

1.获取图片

image-20231207093038043

# @课程   : 爬虫逆向实战课
# @讲师   : 武沛齐
# @课件获取: wupeiqi666import re
import time
import ddddocr
import requests
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver import ActionChainsservice = Service("driver/chromedriver.exe")
driver = webdriver.Chrome(service=service)# 1.打开首页
driver.get('https://www.geetest.com/adaptive-captcha-demo')# 2.点击【文字点选验证】
tag = WebDriverWait(driver, 30, 0.5).until(lambda dv: dv.find_element(By.XPATH,'//*[@id="gt-showZh-mobile"]/div/section/div/div[2]/div[1]/div[2]/div[3]/div[4]'
))
tag.click()# 3.点击开始验证
tag = WebDriverWait(driver, 30, 0.5).until(lambda dv: dv.find_element(By.CLASS_NAME,'geetest_btn_click'
))
tag.click()time.sleep(5)# 要识别的目标图片
target_tag = driver.find_element(By.CLASS_NAME,'geetest_ques_back'
)
target_tag.screenshot("target.png")# 识别图片
bg_tag = driver.find_element(By.CLASS_NAME,'geetest_bg'
)
bg_tag.screenshot("bg.png")time.sleep(2000)
driver.close()

2.目标识别

截图每个字符,并基于ddddocr识别。

image-20231207093226288

# @课程   : 爬虫逆向实战课
# @讲师   : 武沛齐
# @课件获取: wupeiqi666import re
import time
import ddddocr
import requests
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver import ActionChainsservice = Service("driver/chromedriver.exe")
driver = webdriver.Chrome(service=service)# 1.打开首页
driver.get('https://www.geetest.com/adaptive-captcha-demo')# 2.点击【滑动拼图验证】
tag = WebDriverWait(driver, 30, 0.5).until(lambda dv: dv.find_element(By.XPATH,'//*[@id="gt-showZh-mobile"]/div/section/div/div[2]/div[1]/div[2]/div[3]/div[4]'
))
tag.click()# 3.点击开始验证
tag = WebDriverWait(driver, 30, 0.5).until(lambda dv: dv.find_element(By.CLASS_NAME,'geetest_btn_click'
))
tag.click()# 4.等待验证码出来
time.sleep(5)# 5.识别任务图片
target_word_list = []
parent = driver.find_element(By.CLASS_NAME, 'geetest_ques_back')
tag_list = parent.find_elements(By.TAG_NAME, "img")for tag in tag_list:ocr = ddddocr.DdddOcr(show_ad=False)word = ocr.classification(tag.screenshot_as_png)target_word_list.append(word)print("要识别的文字:", target_word_list)time.sleep(2000)
driver.close()

3.背景坐标识别

image-20231207093633102

识别背景中的文字,并获得字体的坐标(后续需按照顺序点击)

3.1 ddddocr

image-20231207095157782

能识别,但是发现默认识别率有点低,想要提升识别率,可以搭建Pytorch环境对模型进行训练,参考:https://github.com/sml2h3/dddd_trainer

# @课程   : 爬虫逆向实战课
# @讲师   : 武沛齐
# @课件获取: wupeiqi666import re
import time
import ddddocr
import requests
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver import ActionChains
from PIL import Image, ImageDraw
from io import BytesIOservice = Service("driver/chromedriver.exe")
driver = webdriver.Chrome(service=service)# 1.打开首页
driver.get('https://www.geetest.com/adaptive-captcha-demo')# 2.点击【滑动拼图验证】
tag = WebDriverWait(driver, 30, 0.5).until(lambda dv: dv.find_element(By.XPATH,'//*[@id="gt-showZh-mobile"]/div/section/div/div[2]/div[1]/div[2]/div[3]/div[4]'
))
tag.click()# 3.点击开始验证
tag = WebDriverWait(driver, 30, 0.5).until(lambda dv: dv.find_element(By.CLASS_NAME,'geetest_btn_click'
))
tag.click()# 4.等待验证码出来
time.sleep(5)# 5.识别任务图片
target_word_list = []
parent = driver.find_element(By.CLASS_NAME, 'geetest_ques_back')
tag_list = parent.find_elements(By.TAG_NAME, "img")
for tag in tag_list:ocr = ddddocr.DdddOcr(show_ad=False)word = ocr.classification(tag.screenshot_as_png)target_word_list.append(word)print("要识别的文字:", target_word_list)# 6.背景图片
bg_tag = driver.find_element(By.CLASS_NAME,'geetest_bg'
)
content = bg_tag.screenshot_as_png# 7.识别背景中的所有文字并获取坐标
ocr = ddddocr.DdddOcr(show_ad=False, det=True)
poses = ocr.detection(content) # [(x1, y1, x2, y2), (x1, y1, x2, y2), x1, y1, x2, y2]# 8.循环坐标中的每个文字并识别
bg_word_dict = {}
img = Image.open(BytesIO(content))for box in poses:x1, y1, x2, y2 = box# 根据坐标获取每个文字的图片corp = img.crop(box)img_byte = BytesIO()corp.save(img_byte, 'png')# 识别文字ocr2 = ddddocr.DdddOcr(show_ad=False)word = ocr2.classification(img_byte.getvalue())  # 识别率低# 获取每个字的坐标  {"鸭":}bg_word_dict[word] = [int((x1 + x2) / 2), int((y1 + y2) / 2)]print(bg_word_dict)time.sleep(1000)
driver.close()

3.2 打码平台

https://www.chaojiying.com/

image-20231206120854606

image-20231206120825599

# @课程   : 爬虫逆向实战课
# @讲师   : 武沛齐
# @课件获取: wupeiqi666import base64
import requests
from hashlib import md5file_bytes = open('5.jpg', 'rb').read()res = requests.post(url='http://upload.chaojiying.net/Upload/Processing.php',data={'user': "wupeiqi",'pass2': md5("密码".encode('utf-8')).hexdigest(),'codetype': "9501",'file_base64': base64.b64encode(file_bytes)},headers={'Connection': 'Keep-Alive','User-Agent': 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)',}
)res_dict = res.json()
print(res_dict)
# {'err_no': 0, 'err_str': 'OK', 'pic_id': '1234612060701120002', 'pic_str': '的,86,73|粉,111,38|菜,40,49|香,198,101', 'md5': 'faac71fc832b2ead01ffb4e813f3be60'}

结合极验案例截图+识别:

image-20231207095921025

# @课程   : 爬虫逆向实战课
# @讲师   : 武沛齐
# @课件获取: wupeiqi666import re
import time
import ddddocr
import requests
import base64
import requests
from hashlib import md5
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver import ActionChains
from PIL import Image, ImageDraw
from io import BytesIOservice = Service("driver/chromedriver.exe")
driver = webdriver.Chrome(service=service)# 1.打开首页
driver.get('https://www.geetest.com/adaptive-captcha-demo')# 2.点击【滑动拼图验证】
tag = WebDriverWait(driver, 30, 0.5).until(lambda dv: dv.find_element(By.XPATH,'//*[@id="gt-showZh-mobile"]/div/section/div/div[2]/div[1]/div[2]/div[3]/div[4]'
))
tag.click()# 3.点击开始验证
tag = WebDriverWait(driver, 30, 0.5).until(lambda dv: dv.find_element(By.CLASS_NAME,'geetest_btn_click'
))
tag.click()# 4.等待验证码出来
time.sleep(5)# 5.识别任务图片
target_word_list = []
parent = driver.find_element(By.CLASS_NAME, 'geetest_ques_back')
tag_list = parent.find_elements(By.TAG_NAME, "img")
for tag in tag_list:ocr = ddddocr.DdddOcr(show_ad=False)word = ocr.classification(tag.screenshot_as_png)target_word_list.append(word)print("要识别的文字:", target_word_list)# 6.背景图片
bg_tag = driver.find_element(By.CLASS_NAME,'geetest_bg'
)
content = bg_tag.screenshot_as_png
bg_tag.screenshot("bg.png")# 7.识别背景中的所有文字并获取坐标
res = requests.post(url='http://upload.chaojiying.net/Upload/Processing.php',data={'user': "wupeiqi",'pass2': md5("密码".encode('utf-8')).hexdigest(),'codetype': "9501",'file_base64': base64.b64encode(content)},headers={'Connection': 'Keep-Alive','User-Agent': 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)',}
)res_dict = res.json()
print(res_dict)# 8.每个字的坐标  {"鸭":(196,85), ...}    target_word_list = ["花","鸭","字"]
bg_word_dict = {}
for item in res_dict["pic_str"].split("|"):word, x, y = item.split(",")bg_word_dict[word] = (x, y)print(bg_word_dict)time.sleep(1000)
driver.close()

4.坐标点击

根据坐标,在验证码上进行点击。

ActionChains(driver).move_to_element_with_offset(标签对象, xoffset=x, yoffset=y).click().perform()

image-20231207154418322

# @课程   : 爬虫逆向实战课
# @讲师   : 武沛齐
# @课件获取: wupeiqi666import re
import time
import ddddocr
import requests
import base64
import requests
from hashlib import md5
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver import ActionChains
from PIL import Image, ImageDraw
from io import BytesIOservice = Service("driver/chromedriver.exe")
driver = webdriver.Chrome(service=service)# 1.打开首页
driver.get('https://www.geetest.com/adaptive-captcha-demo')# 2.点击【滑动拼图验证】
tag = WebDriverWait(driver, 30, 0.5).until(lambda dv: dv.find_element(By.XPATH,'//*[@id="gt-showZh-mobile"]/div/section/div/div[2]/div[1]/div[2]/div[3]/div[4]'
))
tag.click()# 3.点击开始验证
tag = WebDriverWait(driver, 30, 0.5).until(lambda dv: dv.find_element(By.CLASS_NAME,'geetest_btn_click'
))
tag.click()# 4.等待验证码出来
time.sleep(5)# 5.识别任务图片
target_word_list = []
parent = driver.find_element(By.CLASS_NAME, 'geetest_ques_back')
tag_list = parent.find_elements(By.TAG_NAME, "img")
for tag in tag_list:ocr = ddddocr.DdddOcr(show_ad=False)word = ocr.classification(tag.screenshot_as_png)target_word_list.append(word)print("要识别的文字:", target_word_list)# 6.背景图片
bg_tag = driver.find_element(By.CLASS_NAME,'geetest_bg'
)
content = bg_tag.screenshot_as_png# bg_tag.screenshot("bg.png")# 7.识别背景中的所有文字并获取坐标
res = requests.post(url='http://upload.chaojiying.net/Upload/Processing.php',data={'user': "wupeiqi",'pass2': md5("自己密码".encode('utf-8')).hexdigest(),'codetype': "9501",'file_base64': base64.b64encode(content)},headers={'Connection': 'Keep-Alive','User-Agent': 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)',}
)res_dict = res.json()bg_word_dict = {}
for item in res_dict["pic_str"].split("|"):word, x, y = item.split(",")bg_word_dict[word] = (x, y)print(bg_word_dict)
# target_word_list = ['粉', '菜', '香']
# bg_word_dict = {'粉': ('10', '10'), '菜': ('50', '50'), '香': ('100', '93')}
# 8.点击
for word in target_word_list:time.sleep(2)group = bg_word_dict.get(word)if not group:continuex, y = groupx = int(x) - int(bg_tag.size['width'] / 2)y = int(y) - int(bg_tag.size['height'] / 2)ActionChains(driver).move_to_element_with_offset(bg_tag, xoffset=x, yoffset=y).click().perform()time.sleep(1000)
driver.close()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.liansuoyi.cn/news/81406178.html

如若内容造成侵权/违法违规/事实不符,请联系连锁易网进行投诉反馈email:xxxxxxxx@qq.com,一经查实,立即删除!

相关文章

【数据库】对大数据量数据集,PostgreSQL分组统计数量,限定每组最多数量

一、背景介绍 在处理大数据量数据集时,我们经常需要进行分组统计。例如,我们需要统计每个城市的人口数量、每个年龄段的人数等。在 PostgreSQL 中,我们可以使用 row_number() 函数结合 over (partition by) 子句来实现这个功能。同时,为了限定每组最多数量,我们可以使用 r…

面向网关、辅助和自动驾驶系统的汽车域控制器参考设计

面向网关、辅助和自动驾驶系统的汽车域控制器参考设计 说明 当今道路上的分布式车辆架构使用单个 ECU,缺少处理能力和高速接口,无法应对新兴汽车架构的复杂任务和数据移动需求。更高级别的功能需要正确组合DMIPS、数据带宽和功效。Jacinto™ 7 处理器系列中的 DRA829V 和 TDA…

Sample-Efficient Deep Reinforcement Learning via Episodic Backward Update

发表时间:2019 (NeurIPS 2019) 文章要点:这篇文章提出Episodic Backward Update (EBU)算法,采样一整条轨迹,然后从后往前依次更新做experience replay,这种方法对稀疏和延迟回报的环境有很好的效果(allows sparse and delayed rewards to propagate directly through all…

2024春晚刘谦魔术揭秘

2024春晚刘谦魔术揭秘!魔术步骤任意4张扑克牌,叠在一起对半撕开,再叠在一起 名字有几个字,就把几张扑克,依次放到最下面 再将最上面3张,插到剩下扑克牌的中间任意位置 拿出最上面一张扑克牌藏起来 任意拿出一张、两张或三张扑克牌,再插到剩下扑克牌的中间任意位置 如果是…

Redis Cluster 部署详细教程

Redis Cluster 部署详细教程 新服务器上设置 Redis Cluster 的操作文档: 前提条件已购买并初始化三台服务器,假设其 IP 地址分别为:server1-ip, server2-ip, server3-ip 确保服务器之间网络互通,可通过 ping 命令验证步骤 1:安装 Redis 在每台服务器上执行: # 更新系统包…

AtCoder-abc340_f题解

题意简述 给定整数 \(x,y\),询问是否存在整数 \(a,b\),满足:\(-10^{18} \le a,b \le 10^{18}\)。由 \((0,0),(x,y),(a,b)\) 三点构成的三角形面积为 \(1\)。如果存在,输出任意一组;否则输出 -1。 思路 先假设 \(x,y,a,b\) 都是正数。那么图大概是这样:此时红色三角形的面…

Ubuntu服务器使用 Daphne + Nginx + supervisor部署Django项目

视频:https://www.bilibili.com/video/BV1e6421G7uM/?vd_source=36191bed2c30378060ff2efe6831b331Django从 3.0版开始加入对ASGI的支持,使Django开始具有异步功能。 截止目前的5.0版,对异步支持逐步也越来越好,相信在未来的版本中异步将会支持的更加完善。 所以说,我们也…

Linux 中 单词锁定符号

001、 -w选项锁定[root@PC1 test1]# ls a.txt [root@PC1 test1]# cat a.txt ## 测试文本 3432 dsab45cdf 887 abc 33333 77777 sdf fffabc 8888 ddd kk22,kk33k wwww sss uuuur abc [root@PC1 test1]# grep -w "abc" a.txt ## -w选项锁定单词 …

【Azure Function】Azure Function中使用 Java 8 的安全性问题

问题描述 使用Azure Function, 环境是Linux的Java8。目前 Oracle Java JDK8,11,17 和 OpenJDK 8/11/17 都在存在漏洞受影响版本的范围内。OpenJDKCVE numbers: CVE‑2023‑21954 CVE‑2023‑21938 CVE‑2023‑21937 CVE‑2023‑21939 CVE‑2023‑21968 CVE‑2023‑21930 CVE…

fast.ai 机器学习笔记(二)

机器学习 1:第 5 课原文:medium.com/@hiromi_suenaga/machine-learning-1-lesson-5-df45f0c99618 译者:飞龙 协议:CC BY-NC-SA 4.0来自机器学习课程的个人笔记。随着我继续复习课程以“真正”理解它,这些笔记将继续更新和改进。非常感谢 Jeremy 和 Rachel 给了我这个学习的…

Spring 基础

Spring 基础 关键点回顾 反射 反射就是 Reflection,Java 的反射是指程序在运行期可以拿到一个对象的所有信息。 每个类都有一个 Class 对象,包含了与类有关的信息。当编译一个新类时,会产生一个同名的 .class 文件,该文件内容保存着 Class 对象。类加载相当于 Class 对象的…

冗余路径

这道题目是一个模型:给连通的无向图加边,使得无向图没有桥(即变成边双连通分量),最小化加边数 因为边双连通分量本来就没有桥,所以我们考虑对整个图求一遍边双连通分量(使用 tarjan 算法),然后将边双连通分量缩为一个点考虑。那么缩完点后得到的图一定是一棵树(因为图…

SharePoint Online Lookup column threshold

前言最近,一个开发的同时碰到这样一个问题,来问自己,相信很多人也碰到过类似的问题,就分享下。正文1.错误描述 Something went wrong The query cannot be completed because the number of lookup columns it contains exceeds the lookup column threshold.2.错误截图3.错…

线程池工作原理和实现原理

为什么要使用线程池 不使用线程池会怎么样?当需要多线程并发执行任务时,只能不断的通过new Thread创建线程,每创建一个线程都需要在堆上分配内存空间,同时需要分配虚拟机栈、本地方法栈、程序计数器等线程私有的内存空间,当这个线程对象被可达性分析算法标记为不可用时被G…

[粘贴]Sql标准梳理

https://blog.csdn.net/a13407142317/article/details/134995207SQL(Structured Query Language)是一种用于管理关系型数据库管理系统(RDBMS)的标准化语言。SQL标准由国际标准化组织(ISO)和美国国家标准化组织(ANSI)制定和维护,旨在提供一种统一的方式来管理和操作数据…

毫秒时间位数,时而1位,时而2位,时而3位,搞得我好乱呐!

开心一刻今天我突然顿悟了,然后跟我妈聊天我:妈,我发现一个饿不死的办法妈:什么办法我:我先养个狗,再养个鸡妈:然后了我:我拉的狗吃,狗拉的鸡吃,鸡下的蛋我吃,如此反复,我们三都饿不死妈:你整那么多中间商干啥,你就自己拉的自己吃得了,还省事我又顿悟了,回到:…

激光雷达和相机传感器装置的自动外部校准方法(下)

激光雷达和相机传感器装置的自动外部校准方法(下) D.单目数据 如果要校准的传感器是单眼相机,则提取参考点需要检测ArUco标记,这提供了检索目标几何形状所需的线索。 ArUco标记是由黑色边界和内部二进制矩阵组成的合成正方形标记,旨在实现其明确的识别。在校准目标中,使用…

V的2023 - 虽迟但到

未做的事,未圆的梦,虽迟但到一年一度的年终总结又来了,只感叹时光飞逝,这几年的年终总结对我来说就好像是一年写一次的日记,记忆会模糊,但文字不会。 这是第四年,每次回首前几年的文章,心中都会有一丝触动,原来生活给我留下过深刻痕迹。V的2022 - 往事随风 不平凡的20…

最优高铁环

这道题目的第一个难点是处理输入数据 我的一个想法是把一条线路当成一个点,另一个想法是关注两端,把两端作为节点,一条路线就等于是一条边,边权就是速度 第二个难点是spfa速度太慢的问题,给出下面的优化方法:具体怎么写的了解清楚

软件项目实施方案

1.前期调研与需求分析阶段 2.概要设计阶段 3.详细设计阶段 4.软件编码阶段 5.功能测试阶段 6.应用实施阶段软件项目全套文档资料下载:https://www.cnblogs.com/ouya921/p/17989620
推荐文章