一、点触验证码介绍
1、网易易盾验证码选择
【网易易盾】https://dun.163.com/


点触验证码的难点:
1、背景图比较的花哨
2、汉字顺序不好判断
3、汉字做了变形处理、颜色处理
解决方案:
1、自己编写相关代码处理===》用到的技术比较高端,至少得机器学习。
2、使用验证码的处理平台====》省事,花费小
3、人工识别之后,设置一个停止时长,输入验证码
2、超级鹰介绍
【超级鹰】超级鹰验证码识别-专业的验证码云端识别服务,让验证码识别更快速、更准确、更强大


2.1价格体系及软件id
价格体系:不同的验证码以及不同的难度,价格不一。

软件id:帮助我们进行验证码的识别
生成:位于用户中心菜单栏最下方,直接点击生成然后取个名字即可


2.2开发文档


下载位置:与我们点触验证的代码文件放在同一个文件夹下面
开发文档介绍: 图片是案例图片,py文件是关于这个图片识别的代码。如果我们需要识别其他图片,只需要在代码当中更改指定的图片即可。
注意开发文档中的提示:
1、手动添加print()的括号 。
2、如果是win系统,路径需要时用双斜杠//,这个地方其实还是为了取消转义的作用。
3、可能会提示tab空格错误,注意统一一下换行符即可。
2.3超级鹰代码分析
二、案例运用


1、使用selenium 驱动浏览器加载验证码图片
# 导入浏览器驱动
import time
from selenium import webdriver
# 导入定位模块
from selenium.webdriver.common.by import By
# 基本配置模块
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.action_chains import ActionChains
from PIL import Image
import re
from requests_html import HTMLSession
from io import BytesIO
from chaojiying import Chaojiying_Client
# 1、使用selenium加载验证码图片
# 实例化一个浏览器对象
# 实例化一个配置对象(防止浏览器闪退)
option = Options()
option.add_experimental_option('detach', True)
browser = webdriver.Chrome()
browser.get("https://zc.yy.com/reg/udb/reg4udb.do?mode=udb&type=&appid=1&action=3&busiurl=https%3A%2F%2Faq.yy.com")
wait = WebDriverWait(browser, 10)
mainBg = wait.until(EC.element_to_be_clickable((By.CLASS_NAME, 'pw_mainBg')))
讯享网
2、获取验证码的精灵图
方式一:直接截图
方拾二:根据url获取图片之后再根据坐标进行偏移
讯享网# 2、获取验证码的精灵图 mainBg.screenshot('pw_main.png') time.sleep(2)

3、识别验证码图片(调用超级鹰的接口)
导入:from chaojiying import Chaojiying_Client
实例化对象:cjy_c = Chaojiying_Client(username, password, softid)
username: 用户名
password: 密码
softid:软件id
识别方法:PostPic(im, codetype)
im: 图片的二进制数据
codetype: 验证码类型
# 3、识别图片验证码 # 3.1 实例化一个超级鹰的对象 cjy_c = Chaojiying_Client('LIuMU37', 'LiuMumima37', '') # 3.2 直接调用识别的方法 # 3.2.1 获取图片的字节数据(二进制数据) img = Image.open("pw_main.png") # 打开图片 img_fl = BytesIO() # 得到PngImageFile img.save(img_fl, format("PNG")) # 以png的类型将图片保存在临时文件中 img_byte = img_fl.getvalue() # 获取二进制数据 print(img_byte) # 3.2.2 使用超级鹰的验证代码进行识别(返回的是图片坐标位置的json类型文档) res_json = cjy_c.PostPic(img_byte, 9004) # print(res_json) pic_str = res_json['pic_str'] # print(pic_str) # 3.2.3 获取返货数据里面的字符坐标值 for pic in pic_str.split("|"): p = list(map(int, pic.split(","))) # 4、根据坐标点击文字 注意:这个网站图片做了一点小偏移,因此需要稍微更改坐标值 ActionChains(browser).move_to_element_with_offset(mainBg, p[0]-128, p[1]-83).click().perform() time.sleep(0.5) # 5、点击提交按钮 pw_submit = wait.until(EC.element_to_be_clickable((By.CLASS_NAME, "pw_submit"))) ActionChains(browser).click(pw_submit).perform() time.sleep(5)

map函数使用演示
讯享网pic_str = "99,86|45,82|90,25" pic_list = [] for pic in pic_str.split("|"): # p = pic.split(",") # [['99', '86'], ['45', '82'], ['90', '25']] p = list(map(int, pic.split(","))) # [[99, 86], [45, 82], [90, 25]] pic_list.append(p) print(pic_list)
偏移量范围:


x只要是小图范围之内,随便多少都是可以的(大概率)
y 一定是83左右, 因为上面有一排空很多
总代码
# 导入浏览器驱动
import time
from selenium import webdriver
# 导入定位模块
from selenium.webdriver.common.by import By
# 基本配置模块
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.action_chains import ActionChains
from PIL import Image
import re
from requests_html import HTMLSession
from io import BytesIO
from chaojiying import Chaojiying_Client
# 1、使用selenium加载验证码图片
# 实例化一个浏览器对象
# 实例化一个配置对象(防止浏览器闪退)
option = Options()
option.add_experimental_option('detach', True)
browser = webdriver.Chrome()
browser.get("https://zc.yy.com/reg/udb/reg4udb.do?mode=udb&type=&appid=1&action=3&busiurl=https%3A%2F%2Faq.yy.com")
wait = WebDriverWait(browser, 10)
mainBg = wait.until(EC.element_to_be_clickable((By.CLASS_NAME, 'pw_main')))
# 2、获取验证码的精灵图
mainBg.screenshot('pw_main.png')
time.sleep(2)
# 3、识别图片验证码
# 3.1 实例化一个超级鹰的对象
cjy_c = Chaojiying_Client('LIuMU37', 'LiuMumima37', '950859')
# 3.2 直接调用识别的方法
# 3.2.1 获取图片的字节数据(二进制数据)
img = Image.open("pw_main.png") # 打开图片
img_fl = BytesIO() # 得到PngImageFile
img.save(img_fl, format("PNG")) # 以png的类型将图片保存在临时文件中
img_byte = img_fl.getvalue() # 获取二进制数据
# print(img_byte)
# 3.2.2 使用超级鹰的验证代码进行识别(返回的是图片坐标位置的json类型文档)
res_json = cjy_c.PostPic(img_byte, 9004)
# print(res_json)
pic_str = res_json['pic_str']
# print(pic_str)
# 3.2.3 获取返货数据里面的字符坐标值
for pic in pic_str.split("|"):
p = list(map(int, pic.split(",")))
# 4、根据坐标点击文字 注意:这个网站图片做了一点小偏移,因此需要稍微更改坐标值
ActionChains(browser).move_to_element_with_offset(mainBg, p[0]-133, p[1]-85).click().perform()
time.sleep(0.5)
# 5、点击提交按钮
pw_submit = wait.until(EC.element_to_be_clickable((By.CLASS_NAME, "pw_submit")))
ActionChains(browser).click(pw_submit).perform()
time.sleep(5)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/126169.html