热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

保存验证码的方法_图像验证码续

自动化在一些场景给人带来方便,但是也有一些技术上的难题,比如登录时候会输入验证码。这篇就写一下关于验证码的处理。如果是测试环境,就很简单了

自动化在一些场景给人带来方便,但是也有一些技术上的难题,比如登录时候会输入验证码。这篇就写一下关于验证码的处理。

如果是测试环境,就很简单了,常用的两种办法:

1.让开发把验证码注释掉。

2.让开发设置一个万能验证码,只要输入这个验证码就能通过。(感觉这个比较靠谱)

如果是生产环境,再用上面的办法就不太好了,不过还有另外两种办法(如果不嫌麻烦,测试环境也可以用):

1.使用COOKIE跳过登录。

2.使用验证码识别技术。

看第一种办法,点这里。

第二种研究验证码识别的时间比较长了,遇到的一些坑记得不太清了,就写一下正常的流程,细心一些应该都不会遇到坑。

注意(敲黑板):这是python3能实现的,python2不能用。我这种实现方法仅能识别特别清楚的验证码,如果验证码图片干扰很多,就别看了,实现不了。我用的是个实验的网址,验证码能识别一小部分,下面先放两张识别效果。

a919d31396c8863f6c90d98a60da9e79.png
5812e6f9f993d25c1bb828ea9d68ad0b.png

第一张现实和理想差距有点大,我最多在代码里去掉特殊符号,剩下识别错了真是没办法了。

仍然想试的可以继续往下走,我这是生产环境, 可以在这里试验,如果能注册一下就更好了。(关注微信公众号,周五可能会有特价机票哦)打了一个广告。

首先得装环境,识别验证码已经不是selenium自己能办到的了。cmd下输入下面命令:

pip install Pillow(如果报错,输入:pip.exe install Pillow)

pip install pytesseract(如果报错,输入:pip.exe install pytesseract)

第一个是对图片处理的包,第二个是识别验证码的包,还需要下载个包,百度搜索:Tesseract-OCR,下载解压到电脑,可以不放在C盘,这个好像也没有位数限制。

解压到电脑以后需要加上环境变量,在path里加上Tesseract-OCR的路径,然后在pycharm里(我只用这个,别的工具什么情况我不知道),External Libraries->Python 3.x->Lib->site-packages->pytesseract->pytesseract.py里面修改一段代码:

dc082b3b339aae354ec20e24897dfec6.png

由于斜杠是转义字符,我就用了双斜杠,一定要看清不是只加到环境变量的那个路径,后面要加到tesseract.exe,我只记得这一个坑,执行脚本总是提示我未安装或者没配置环境变量。准备工作就这么多,下面我放上我的代码,供参考。


  1. # -*- coding: utf-8 -*-

  2. # python 3.7.0

  3. #

  4. import re

  5. import requests

  6. import pytesseract

  7. from selenium import webdriver

  8. from PIL import Image, ImageEnhance

  9. import time

  10. #

  11. driver=webdriver.Chrome()

  12. driver.maximize_window()

  13. driver.get("https://higo.flycua.com/hp/html/login.html")

  14. driver.implicitly_wait(30)

  15. #下面用户名和密码涉及到我个人信息,所以隐藏

  16. driver.find_element_by_name('memberId').send_keys('xxxxxx')

  17. driver.find_element_by_name('password').send_keys('xxxxxx')

  18. #因为验证码不能一次就正确识别,我加了循环,一直识别,直到登录成功

  19. while True:

  20. #清空验证码输入框,因为可能已经识别过一次了,里面有之前识别的错的验证码

  21. driver.find_element_by_name("verificationCode").clear()

  22. # 截图或验证码图片保存地址

  23. screenImg = "H:screenImg.png"

  24. # 浏览器页面截屏

  25. driver.get_screenshot_as_file(screenImg)

  26. # 定位验证码位置及大小

  27. location = driver.find_element_by_name('authImage').location

  28. size = driver.find_element_by_name('authImage').size

  29. #下面四行我都在后面加了数字,理论上是不用加的,但是不加我这截的不是验证码那一块的图,可以看保存的截图,根据截图修改截图位置

  30. left = location['x']+530

  31. top = location['y']+175

  32. right = location['x'] + size['width']+553

  33. bottom = location['y'] + size['height']+200

  34. # 从文件读取截图,截取验证码位置再次保存

  35. img = Image.open(screenImg).crop((left, top, right, bottom))

  36. #下面对图片做了一些处理,能更好识别一些,相关处理再百度看吧

  37. img = img.convert('RGBA') # 转换模式:L | RGB

  38. img = img.convert('L') # 转换模式:L | RGB

  39. img = ImageEnhance.Contrast(img) # 增强对比度

  40. img = img.enhance(2.0) # 增加饱和度

  41. img.save(screenImg)

  42. # 再次读取识别验证码

  43. img = Image.open(screenImg)

  44. code = pytesseract.image_to_string(img)

  45. #打印识别的验证码

  46. #print(code.strip())

  47. #识别出来验证码去特殊符号,用到了正则表达式,这是我第一次用,之前也没研究过,所以用的可能粗糙,请见谅

  48. b=''

  49. for i in code.strip():

  50. pattern = re.compile(r'[a-zA-Z0-9]')

  51. m = pattern.search(i)

  52. if m!=None:

  53. b+=i

  54. #输出去特殊符号以后的验证码

  55. print (b)

  56. #把b的值输入验证码输入框

  57. driver.find_element_by_name("verificationCode").send_keys(b)

  58. #点击登录按钮

  59. driver.find_element_by_class_name('login-form-btn-submit').click()

  60. #定时等待5秒,如果验证码识别错误,提示验证码错误需要等一会儿才能继续操作

  61. time.sleep(5)

  62. #获取COOKIE,并把COOKIE转化为字符串格式

  63. COOKIE1= str(driver.get_COOKIEs())

  64. print (COOKIE1)

  65. #第二次用正则表达式,同样有点粗糙,代码实现的功能就是看COOKIE里是否有tokenId这个词,如果有说明登录成功,跳出循环,可以进行后面的自动化操作,如果没有,则表示登录失败,继续识别验证码

  66. matchObj = re.search(r'tokenId', COOKIE1, re.M | re.I)

  67. if matchObj:

  68. print (matchObj.group())

  69. break

  70. else:

  71. print ("No match!!")

  72. print ('结束')

大概就是这些, 希望能有所帮助。



推荐阅读
  • 1.淘宝模拟登录2.天猫商品数据爬虫3.爬取淘宝我已购买的宝贝数据4.每天不同时间段通过微信发消息提醒女友5.爬取5K分辨率超清唯美壁纸6.爬取豆瓣排行榜电影数据(含GUI界面版) ... [详细]
  • Python使用Pillow包生成验证码图片的方法
    本文介绍了使用Python中的Pillow包生成验证码图片的方法。通过随机生成数字和符号,并添加干扰象素,生成一幅验证码图片。需要配置好Python环境,并安装Pillow库。代码实现包括导入Pillow包和随机模块,定义随机生成字母、数字和字体颜色的函数。 ... [详细]
  • 基于dlib的人脸68特征点提取(眨眼张嘴检测)python版本
    文章目录引言开发环境和库流程设计张嘴和闭眼的检测引言(1)利用Dlib官方训练好的模型“shape_predictor_68_face_landmarks.dat”进行68个点标定 ... [详细]
  • EzPP 0.2发布,新增YAML布局渲染功能
    EzPP发布了0.2.1版本,新增了YAML布局渲染功能,可以将YAML文件渲染为图片,并且可以复用YAML作为模版,通过传递不同参数生成不同的图片。这个功能可以用于绘制Logo、封面或其他图片,让用户不需要安装或卸载Photoshop。文章还提供了一个入门例子,介绍了使用ezpp的基本渲染方法,以及如何使用canvas、text类元素、自定义字体等。 ... [详细]
  • 开源Keras Faster RCNN模型介绍及代码结构解析
    本文介绍了开源Keras Faster RCNN模型的环境需求和代码结构,包括FasterRCNN源码解析、RPN与classifier定义、data_generators.py文件的功能以及损失计算。同时提供了该模型的开源地址和安装所需的库。 ... [详细]
  • Python已成为全球最受欢迎的编程语言之一,然而Python程序的安全运行存在一定的风险。本文介绍了Python程序安全运行需要满足的三个条件,即系统路径上的每个条目都处于安全的位置、"主脚本"所在的目录始终位于系统路径中、若python命令使用-c和-m选项,调用程序的目录也必须是安全的。同时,文章还提出了一些预防措施,如避免将下载文件夹作为当前工作目录、使用pip所在路径而不是直接使用python命令等。对于初学Python的读者来说,这些内容将有所帮助。 ... [详细]
  • 本文介绍了在Python3中如何使用选择文件对话框的格式打开和保存图片的方法。通过使用tkinter库中的filedialog模块的asksaveasfilename和askopenfilename函数,可以方便地选择要打开或保存的图片文件,并进行相关操作。具体的代码示例和操作步骤也被提供。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 本文介绍了包的基础知识,包是一种模块,本质上是一个文件夹,与普通文件夹的区别在于包含一个init文件。包的作用是从文件夹级别组织代码,提高代码的维护性。当代码抽取到模块中后,如果模块较多,结构仍然混乱,可以使用包来组织代码。创建包的方法是右键新建Python包,使用方式与模块一样,使用import来导入包。init文件的使用是将文件夹变成一个模块的方法,通过执行init文件来导入包。一个包中通常包含多个模块。 ... [详细]
  • 人脸检测 pyqt+opencv+dlib
    一、实验目标绘制PyQT界面,调用摄像头显示人脸信息。在界面中,用户通过点击不同的按键可以实现多种功能:打开和关闭摄像头, ... [详细]
  • Pylance有哪些特性
    这篇文章给大家分享的是有关Pylance有哪些特性的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Pylance安装和其他VSC ... [详细]
  • pycharm安装插件的方法
    小编给大家分享一下pycharm安装插件的方法,相信大部分人都还不怎么了解,因此分享这边文章给大家学习,希望大家阅读完这篇文章后大所收获,下面 ... [详细]
  • 有时候导入本地模块或者py文件时,下方会出现红色的波浪线,但不影响程序的正常运行,但是在查看源函数文件时,会出现问题问题如下 ... [详细]
  • 关于python调试大法的信息
    本文目录一览:1、pdbpython调试怎么用 ... [详细]
  • 1.《Python程序设计基础与应用》第1章 Python概述
    第1章Python概述1.1Python语言简介(1)Python是一门跨平台、开源、免费的解释型高级动态编程语言。(2࿰ ... [详细]
author-avatar
布景tamimi_498
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有