效果示例

预·思路

要做的并不多,封装类,方法各司其职!验证的关键部位(文字坐标)交给第三方平台;

以国家企业信用信息公示系统网站为例,点击查询就会产生验证界面!

  • selenium控制浏览器进入页面,查询调出验证页面
  • 查看网页获取图片链接,将图片转成字节流的形式传给第三方平台
  • 第三方返回图片中各个文字的坐标值,点击图片中的文字
  • 等待验证成功!

有一些编写程序时候的问题,在最后说明;


正·代码

  • 进入页面,输入查询公司或企业,点击查询,弹出验证页面
# 注册超级鹰,进入页面生成软件id
CHAOJIYING_USERNAME = ''
CHAOJIYING_PASSWORD = ''
CHAOJIYING_SOFT_ID =
CHAOJIYING_KIND_FOUR = 9004  # 1~4 9004    #1~5 9201
CHAOJIYING_KIND_FIVE = 9008  # 5~8 9008
DATA_TEXT = '小米科技'
class CrackTouClick():def __init__(self):self.url = 'http://www.gsxt.gov.cn/index.html'self.browser = webdriver.Chrome()self.wait = WebDriverWait(self.browser, 20)self.chaojiying = Chaojiying(CHAOJIYING_USERNAME, CHAOJIYING_PASSWORD, CHAOJIYING_SOFT_ID)def __del__(self):self.browser.close()def open(self):"""打开网页输入用户名密码:return: None"""self.browser.get(self.url)def text_input(self):'''输入查询标签:return: '''input = self.wait.until(EC.presence_of_element_located((By.ID, 'keyword')))return input
  • 这个时候利用第三方平台,传入图片字节流(或者base64加密转码)!

    图片

    传入方式

    注意:
    在第三方源码中第二种方式需要更改为file_base(已标注)

    更改方式

  • 第三方返回信息(其中就有文字坐标)(pic_str)

{'err_no': 0, 'err_str': 'OK', 'pic_id': '3068920282435800059', 'pic_str': '203,298|67,264|242,60|238,260', 'md5': '6330865e91232108ae828df101edff12'}

  • 这样,我们获取了文字坐标值,就可以进行解析点击文字了!
    def get_touclick_button(self):"""获取初始验证按钮:return:"""time.sleep(3)button = self.wait.until(EC.element_to_be_clickable((By.ID, 'btn_query')))return buttondef get_touclick_element(self):"""获取验证图片对象:return: 图片对象,图片链接"""element = self.wait.until(EC.presence_of_element_located((By.CLASS_NAME, 'geetest_item_img')))url_http = element.get_attribute('src')#print(url_http)return element,url_httpdef get_points(self, captcha_result):"""解析识别结果:param captcha_result: 识别结果:return: 转化后的结果"""groups = captcha_result.get('pic_str').split('|')locations = [[int(number) for number in group.split(',')] for group in groups]return locationsdef touch_click_words(self, locations):"""点击验证图片:param locations: 点击位置:return: None"""for location in locations:print(location)element,url_http = self.get_touclick_element()ActionChains(self.browser).move_to_element_with_offset(element, location[0],location[1]).click().perform()time.sleep(0.5)def touch_click_verify(self):"""点击验证按钮:return: None"""button = self.wait.until(EC.element_to_be_clickable((By.CLASS_NAME, 'geetest_commit_tip')))button.click()def request_download(self,IMAGE_URL):'''获取图片链接转换字节流,传入超级鹰:return:'''r = requests.get(IMAGE_URL)res = requests.get(IMAGE_URL,stream=True)  # 获取字节流最好加stream这个参数,原因见requests官方文档byte_stream = BytesIO(res.content)  # 把请求到的数据转换为Bytes字节流roiImg = Image.open(byte_stream)  # Image打开Byte字节流数据# roiImg.show()   #  弹出 显示图片imgByteArr = BytesIO()  # 创建一个空的Bytes对象roiImg.save(imgByteArr, format='PNG')  # PNG就是图片格式,我试过换成JPG/jpg都不行imgByteArr = imgByteArr.getvalue()  # 这个就是保存的图片字节流with open('img.png', 'wb') as f:f.write(r.content)return imgByteArr
  • 到这里,我已经完成了程序需要的一切,配合selenium工具是大大减少了开发者的编写难度,需要关注的主要是图片转码、解析返回信息等图片处理问题!

说明·问题

  • 本次验证码识别借鉴崔庆才《python3爬虫开发实战》提供的代码思路,有一个比较大的问题就是他用网页截图的方式来获取图片,毕竟是两年前的代码,当时的验证码肯定和现在的有所不同,所以说不能直接截取(不能获取文字顺序,影响识别率),经过优化,获取网页隐藏图片链接地址,通过io库里的方法,对图片进行转换字节流传入第三方py文件!

还有一个可以识别的api可以用

https://www.kancloud.cn/abcabc123/yiyunapi/1879968

【python+selenium】点触文字验证码的识别相关推荐

  1. Python + selenium自动化工具 + 滑块验证码+点选验证码,实现模拟登录“中国铁路网12306”

    文章目录 一.模拟登录"中国铁路网12306 1.引入库 2.初始化 3.将点选验证码图片,通过人工打码,返回目标像素位置(json格式). 4.点选验证码位置得到后,需要鼠标左击进行模拟人 ...

  2. python+selenium+chrome 做滑动验证码 会被浏览器检测到使用的自动软件导致滑动验证失败

    python+selenium+chrome 做滑动验证码 会被浏览器检测到使用的自动软件导致滑动验证失败 解决方法:代码中添加: import time from selenium import w ...

  3. 【验证码的识别】—— 点触式验证码的识别

    一.前言 大家好,不知不觉的我来csdn已经又一周年了,在这一年里,我收获了很多东西,我是2022年2月22日入驻CSDN的,一开始只是为了方便浏览文章的,后来,我也有事没事发发文章,创作了100多篇 ...

  4. python selenium UI自动化解决验证码的4种方法

    测试环境 windows7+ firefox50+ geckodriver # firefox浏览器驱动 python3 selenium3 selenium UI自动化解决验证码的4种方法:去掉验证 ...

  5. python+selenium,实现带有验证码的自动化登录功能

    python+selenium的环境准备,请自行安装完成,这里直接贴代码,方便做项目时直接使用. 1 import time 2 from selenium import webdriver 3 fr ...

  6. python(自动化)利用selenium+百度ocr文字识别验证码实现自动登陆登陆CET-四级报名系统

    操作步骤: 1:登陆打开CET-考试系统 2:填写相关登陆信息 3:调用百度ocr实现文字验证码识别 4:实现登陆 如何使用和调用百度ocr文字识别接口 1:进入百度AI开发平台:链接 2:在页面上选 ...

  7. python实现网站的自动登录(selenium实现,带验证码识别)

    python实现网站自动登录(selenium实现,带验证码识别) 一.前言 这是鄙人写的第一篇博客,旨在总结一下近期所学,本文通过selenium工具实现工作所用网站的自动登录,下图为网站登录界面. ...

  8. python+selenium识别验证码实例

    上篇文章<python+selenium+pytesseract识别图片验证码>对验证码进行识别后,应用到具体实例过程中,发现该算法识别可能会出现识别错误或者没有输出结果的情况,所以在具体 ...

  9. python点触图形验证码识别_GitHub - AaronJny/captcha_detection: 点选式验证码识别方案...

    方案要点: 点选式验证码的一般解决流程 如何使用 xyolo 训练自己的目标检测模型 不借助 OCR 功能解决中文验证码的识别问题 爬虫,反爬虫,反反爬虫--一个无限循环. 验证码是反爬虫手段中的常用 ...

最新文章

  1. win10系统搭建Tensorflow深度学习平台详细步骤
  2. RS232与RS485的功能与区别!
  3. [Spring Cloud Task]6 Spring Batch批处理应用设计原则
  4. windows phone7---MVVM模式
  5. 贪心问题JAVA_java背包问题(贪心法)
  6. linux dd iflag oflag,centos – dd oflag =直接5倍速
  7. python设置随机数种子为12_Python标准库12 数学与随机数 (math包,random包)(转载)...
  8. 【今日CV 视觉论文速览】 19 Nov 2018
  9. OracleXE安装完成后 http://127.0.0.1:8080/apex 总是在刷新无法打开
  10. mysql读会产生事务吗_来谈谈MySQL事务及事务引发的问题
  11. redis缓存数据库技术
  12. Flexbox中英文手册
  13. 104种木马手工清除方法
  14. Excel - 单元格设置斜线 并 添加文字
  15. 如何写好产品需求文档
  16. java抠图边框颜色处理_ps抠图边缘颜色怎么处理
  17. crmeb阿里云短信配置
  18. CellPress | 人工智能在临床试验中的应用
  19. 商业研究(9):入口思维(刚需、频次、免费、变现)
  20. Azure:陪伴你们,是我最长情的告白

热门文章

  1. Liunx中mysql服务
  2. python 条件语句实例_详解python 条件语句和while循环的实例代码
  3. freemarer代码生成案例
  4. C++经典算法题-排列组合
  5. Cesium通过primitives绘制大数据量扇形图
  6. pandas 实操函数使用合集
  7. 在腾讯云搭建代理服务器的全部过程
  8. 基于RTP协议的IP电话QoS监测及提高策略
  9. 【新知实验室】TRTC体验
  10. 爬虫I号 :获取免费代理服务器进行代理验证