selenium 自动化之四----图形验证码处理

2024-09-03 03:48

本文主要是介绍selenium 自动化之四----图形验证码处理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目前登录功能增加了验证码的各种形式,本文主要讲解图形验证码的处理方式
需要安装 pytesseract tesseract-ocr pilow 三方库
安装结束之后,修改pytesseract 这个源文件的tesseract_cmd = ‘/usr/local/Cellar/tesseract/4.0.0/bin/tesseract’
这个绝对路径就是你安装tesseract-ocr 这个执行文件

  • 在本案例中,我们谁到了几个知识点
    • 1 .保存截图信息 使用driver.save_screenshot
    • 2.同时对保存的图片进行截取保存 ,先确定图片的坐标(left top right,height)确认X及Y抽数据,及大小,这里涉及到了两个方法 元素的size 及location 属性
    • 3.然后针对截取的图片进行截取 使用设定对象的crop(left top right,height)进行保存,使用save方法保存即可
    • 4.针对保存的文件,使用了第三方的工具进行解析pytesseract.image_to_string(imgcode).strip()]
# -*- coding: utf-8 -*-
from selenium import webdriver
from time import sleep
import pytesseract
from PIL import ImageEnhance,Image
import re ,os
mobileEmulation = {'deviceName': 'iPhone X'} ##配置浏览器操作模式
options = webdriver.ChromeOptions()
options.add_experimental_option('mobileEmulation', mobileEmulation)
driver = webdriver.Chrome(chrome_options=options)
driver.get('https://m.xxx.cn/regOrlogin')
screenImg="/Users/xxx/Desktop/111.png"
newscreenImg="/Users/xxx/Desktop/code111.png"
driver.find_element_by_class_name('l').click()
sleep(2)
driver.find_element_by_name('mobile').send_keys('185xxxxxxx')
driver.find_element_by_name('password').send_keys('password')
sleep(3)
driver.get_screenshot_as_file(screenImg) # 保存图片
region=Image.open(screenImg)
#打开保存的截图文件
region=(812, 739, 1200, 900)
img=Image.open(screenImg).crop(region).save(screenImg)
img=Image.open(screenImg)
imgcode=img.convert('L')
imgcode = ImageEnhance.Contrast(img)#增强对比度
imgcode.enhance(2.0)	#增加饱和度
imgcode=Image.open(screenImg).crop((0,0,300,200)).save(newscreenImg)
#上边操作imgcode 不能直接save操作,会报错没有该属性方法,所以又用最笨的方式重写了一下crop调用save方法,自动获取坐标代码老是报错,智能用这种人工坐标方式。
imgcode=Image.open(newscreenImg)
print(imgcode)
code = pytesseract.image_to_string(imgcode).strip()
print(code)
driver.find_element_by_name("imgCode").send_keys(code)##赋值验证码的数据,但是识别率实在是不好啊
sleep(10)
driver.find_element_by_class_name("btn_submit").click()driver.quit()

后面研究待完善
上边举例的坐标为手工操作,实际操作中很麻烦,下边解决该问题自动获取验证码的坐标焦点进行截取解析
在这里插入图片描述
说明 假如我们这个验证码分为 ABCD 四个坐标 按照图片的坐标定位如下
A=left = img_code.location[‘x’] #验证码图片的坐标截取
C=top = img_code.location[‘y’]
B=rigth= img_code.size[‘width’]+left
D=heigth=img_code.size[‘height’]+top

from selenium import webdriver
from time import sleep
import pytesseract
from PIL import ImageEnhance,Image
import re ,os
mobileEmulation = {'deviceName': 'iPhone X'}
options = webdriver.ChromeOptions()
options.add_experimental_option('mobileEmulation', mobileEmulation)
driver = webdriver.Chrome(chrome_options=options)
driver.get('https://m.xxxx.cn/regOrlogin')
screenImg="/Users/xxxx/Desktop/111.png"
newscreenImg="/Users/jiahongming/Desktop/code111.png"driver.find_element_by_class_name('l').click()
driver.save_screenshot(screenImg) ##截取屏幕图片保存
sleep(5)
img_code =driver.find_element_by_name("verifyCodeImg") #先查找验证码元素
left = img_code.location['x'] #验证码图片的坐标截取
top = img_code.location['y']
rigth= img_code.size['width']+left
heigth=img_code.size['height']+top
print(left,top,rigth,heigth)
img = Image.open(screenImg)
imge= img.crop((left,top,rigth,heigth))
imge.save(newscreenImg)
code = pytesseract.image_to_string(imge).strip()
print(code)
driver.find_element_by_name("imgCode").send_keys(code)
driver.find_element_by_class_name("btn_submit").click()
driver.quit()

说明:实际环境中,可能出现定位的坐标与实际截取保存的图片坐标有偏差,导致程序无法进行下去
在selenium中location 成像为100%的方式进行定位,所以电脑的显示设置也需要一直,如果出现不一致就会先元素定位坐标偏差。我们也可以不用改电脑的显示设置,可以通过代码进行修改,就是将定位的坐标都乘以哪个显示比例即可,例如,我得电脑显示成像为200%的比例值显示,那么定位坐标代码如下

left = int(code_element.location['x'])*200/100 #验证码图片的坐标截取
top = int(code_element.location['y'])*200/100
rigth= int((code_element.size['width'])*200/100+left) ## 要确认是单独获取的值乘以成像显示比例 
heigth=int((code_element.size['height'])*200/100+top)

这篇关于selenium 自动化之四----图形验证码处理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1131939

相关文章

Go语言使用Buffer实现高性能处理字节和字符

《Go语言使用Buffer实现高性能处理字节和字符》在Go中,bytes.Buffer是一个非常高效的类型,用于处理字节数据的读写操作,本文将详细介绍一下如何使用Buffer实现高性能处理字节和... 目录1. bytes.Buffer 的基本用法1.1. 创建和初始化 Buffer1.2. 使用 Writ

Python视频处理库VidGear使用小结

《Python视频处理库VidGear使用小结》VidGear是一个高性能的Python视频处理库,本文主要介绍了Python视频处理库VidGear使用小结,文中通过示例代码介绍的非常详细,对大家的... 目录一、VidGear的安装二、VidGear的主要功能三、VidGear的使用示例四、VidGea

Python Invoke自动化任务库的使用

《PythonInvoke自动化任务库的使用》Invoke是一个强大的Python库,用于编写自动化脚本,本文就来介绍一下PythonInvoke自动化任务库的使用,具有一定的参考价值,感兴趣的可以... 目录什么是 Invoke?如何安装 Invoke?Invoke 基础1. 运行测试2. 构建文档3.

Python结合requests和Cheerio处理网页内容的操作步骤

《Python结合requests和Cheerio处理网页内容的操作步骤》Python因其简洁明了的语法和强大的库支持,成为了编写爬虫程序的首选语言之一,requests库是Python中用于发送HT... 目录一、前言二、环境搭建三、requests库的基本使用四、Cheerio库的基本使用五、结合req

使用Python处理CSV和Excel文件的操作方法

《使用Python处理CSV和Excel文件的操作方法》在数据分析、自动化和日常开发中,CSV和Excel文件是非常常见的数据存储格式,ython提供了强大的工具来读取、编辑和保存这两种文件,满足从基... 目录1. CSV 文件概述和处理方法1.1 CSV 文件格式的基本介绍1.2 使用 python 内

Windows自动化Python pyautogui RPA操作实现

《Windows自动化PythonpyautoguiRPA操作实现》本文详细介绍了使用Python的pyautogui库进行Windows自动化操作的实现方法,文中通过示例代码介绍的非常详细,对大... 目录依赖包睡眠:鼠标事件:杀死进程:获取所有窗口的名称:显示窗口:根据图片找元素:输入文字:打开应用:依

如何使用celery进行异步处理和定时任务(django)

《如何使用celery进行异步处理和定时任务(django)》文章介绍了Celery的基本概念、安装方法、如何使用Celery进行异步任务处理以及如何设置定时任务,通过Celery,可以在Web应用中... 目录一、celery的作用二、安装celery三、使用celery 异步执行任务四、使用celery

SpringBoot操作spark处理hdfs文件的操作方法

《SpringBoot操作spark处理hdfs文件的操作方法》本文介绍了如何使用SpringBoot操作Spark处理HDFS文件,包括导入依赖、配置Spark信息、编写Controller和Ser... 目录SpringBoot操作spark处理hdfs文件1、导入依赖2、配置spark信息3、cont

Jenkins中自动化部署Spring Boot项目的全过程

《Jenkins中自动化部署SpringBoot项目的全过程》:本文主要介绍如何使用Jenkins从Git仓库拉取SpringBoot项目并进行自动化部署,通过配置Jenkins任务,实现项目的... 目录准备工作启动 Jenkins配置 Jenkins创建及配置任务源码管理构建触发器构建构建后操作构建任务

SpringBoot整合kaptcha验证码过程(复制粘贴即可用)

《SpringBoot整合kaptcha验证码过程(复制粘贴即可用)》本文介绍了如何在SpringBoot项目中整合Kaptcha验证码实现,通过配置和编写相应的Controller、工具类以及前端页... 目录SpringBoot整合kaptcha验证码程序目录参考有两种方式在springboot中使用k