首页 > 其他分享 >验证码2 成功了一半

验证码2 成功了一半

时间:2023-09-28 14:11:39浏览次数:28  
标签:right bottom 一半 image driver 验证码 成功 import top

第一步

导入第一个库 OCR 识别图像上文字的库   pytesseract ;它是Google的Tesseract-OCR引擎的Python封装

导入前需要先安装

 

 

 

方便理解:这个词由python中的py开头;tesseract是立方体,延伸将二维变成立方体

"tesseract"方便记忆:将单词分解为音节,例如 "tes-ser-act"。

                                                                                                    "tes" 与 "test"(测试)联系起来,

                                                                                                     "ser" 与 "search"(搜索)联系起来,

                                                                                                     "act" 与 "action"(行动)联系起来。

第二步 导入处理照片的库 PIL  Python Imaging Library

包括图像的打开、保存、剪裁、缩放、旋转等操作。通过导入Image模块,我们可以使用PIL库中提供的各种图像处理函数和方法来处理图像数据

python自带的库

 第三步  下载下载Tesseract-OCR引擎  否则无法OCR识别    

如何下载安装,参照大佬的博客园(https://blog.csdn.net/weixin_51571728/article/details/120384909)

https://digi.bib.uni-mannheim.de/tesseract/   下载  tesseract-ocr-w64-setup-v5.0.0.20190623这个版本

 耗时比较久

 下载后双击安装并添加环境变量

 下载语言包

https://gitcode.net/mirrors/tesseract-ocr/tessdata/-/blob/master/chi_sim.traineddata

 

之前下载时选择了中文简体语言包,但因为墙,取消了,所以单独下载了包后直接替换就可以

 

 验证效果

代码

将照片中文字识别出来

 

import cv2
import pytesseract

# 加载图片
image = cv2.imread('2.png')

# 将图片转换为灰度图像
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# 使用Tesseract进行文本识别
result = pytesseract.image_to_string(gray)

# 打印识别结果
print(result)

结果

VP\Administrator

--------------------------------------

代码 

实现对整个截屏截取验证码

# 从全屏截图中剪裁出验证码的照片
from PIL import Image


def crop_image(image_path, top, bottom, left, right,output_path):
    # 打开图片
    image = Image.open(image_path)

    # 裁剪图片
    cropped_image = image.crop((left, top, right, bottom))

    # 显示裁剪后的图片
    cropped_image.show()
    # 保存裁剪后的图片
    cropped_image.save(output_path)


# 示例用法
image_path = "screenshot.png"  # 替换为你的图片路径
'''
left=234
top=503
right=334
bottom=533
'''
top = 503  # 上边界的坐标
bottom = 533  # 下边界的坐标
left = 234  # 左边界的坐标
right = 334  # 右边界的坐标
output_path = "screenshot.png"  # 要保存的路径和文件名
crop_image(image_path, top, bottom, left, right,output_path)

最终效果

图片仅裁剪为二维码

---------------------------------------------------------------------------------------------------------------------

代码  获取上下左右的坐标和整个页面的截屏照片

# 导包


from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as ES
from time import sleep
import pytesseract # 导入ocr库
from PIL import Image # 导入图像处理库
# 定义类
class FindEle:
    def __init__(self,driver):
        self.driver=driver

    def get_cap(self,loc):
        sleep(3)

        ele_cap=driver.find_element(By.CSS_SELECTOR,loc)
        # ele_cap.send_keys("hello")

        # 获取元素的位置和大小
        location=ele_cap.location
        size=ele_cap.size
        print(f"location:{location},size:{size}")
        # 获取整个页面截图
        driver.save_screenshot("screenshot.png")
        sleep(5)
        # 打开照片
        captcha_image=Image.open("screenshot.png")
        # 获取验证码的上下左右坐标
        left=int(location['x'])
        top=int(location['y'])
        right=int(location['x']+size['width'])
        bottom=int(location['y']+size['height'])
        print(f"left:{left},top:{top},right:{right},bottom:{bottom}")
        # 对图片做裁剪
        captcha_image=captcha_image.crop((left,top,right,bottom))
        # OCR识别
        ele_value=pytesseract.image_to_string(captcha_image)
        print(ele_value)



    pass
# 调用
if __name__ == '__main__':
    # 调用类
    driver=webdriver.Chrome()
    # 打开浏览器
    driver.get('http://XXX/member.php?mod=register')
    # 调用类
    test_loc="img[src*='misc.php?mod=']"

    captcha=FindEle(driver)

    captcha.get_cap(test_loc)
    sleep(3)
    driver.quit()

----------------------------

遗留问题  验证码字体大小不一致不能识别 ,正常的可以识别,估计需要导入字体吧

 

标签:right,bottom,一半,image,driver,验证码,成功,import,top
From: https://www.cnblogs.com/haha1988/p/17735605.html

相关文章

  • 验证码
      基础代码 #导包fromseleniumimportwebdriverfromselenium.webdriver.common.byimportByfromselenium.webdriver.support.uiimportWebDriverWaitfromselenium.webdriver.supportimportexpected_conditionsasEC#定义driverdriver=webdriver.Chrom......
  • 业务安全情报23期 | 国庆前夕,又成功狙击一个倒卖机票的不法团伙
    中秋国庆临近,热门航线机票预定量暴增。顶象防御云业务安全情报中心,监测到一个不法团伙进行虚假占座攻击,倒卖热门航班机票。在顶象协助下,该航空公司有效阻截多日的攻击,保障乘客购票利益。 热门航班遭到“倒票”攻击今年中秋节、国庆节连休8天,国内热门城市机票预订量、酒店预......
  • Seata XA模式一阶段为什么一直锁定资源等二阶段成功?AT模式怎么解决的这个缺陷?
    Winwin:SeataXA模式一阶段为什么一直锁定资源等二阶段成功?AT模式怎么解决的这个缺陷?兔子:Seata是一个非常强大的分布式事务解决方案,它提供了XA模式和AT模式来支持分布式事务的一致性和可靠性。关于你的问题,我们先来聊一下SeataXA模式的一阶段和二阶段,好吗?在SeataXA模式的一......
  • 详解Windows 安装Docker Desktop(百分百成功)
    相信IT职场同学目前对docker这个概念已经不在陌生,docker在运维同学和开发同学中应用比较广泛,测试同学想要进行实操则在很大层度上需要运维同学的配合(在指定的服务器上进行),这就需要看别人脸色行事,或多或少会有少许不爽;加之现在各种工具也都提供了docker镜像,我们在做工具调研时可......
  • Python脚本连接Oracle数据库并验证成功
    #yaml文件存储数据->root\Data\oracle_admin_f_shozaiko.yaml#TestDataforOracleDB:ADMIN->F_SHOZAIKO-name:connecttoOraclerequest:uname:adminupwd:P823!ApoLhost:rf-oms.cbfvvrud0bld.ap-northeast-1.rds.amazonaws.com:1521/rfomsqu......
  • Oracle CloudWorld 2023:Safra Catz主题演讲——把客户的成功放在首要位置
    SafraCatz在OracleCloudWorld2023的开场演讲主题是“把客户的成功放在首要位置”。她强调了客户的重要性,并说大家通过合作和技术可以实现几乎一切。她感谢在场的观众,强调了学习和分享的重要性,以及公司致力于为客户提供更好服务的承诺。在演讲中,她还邀请了来自其他公司的高管......
  • 成功实现FaceTime语音,FaceTime视频,FaceTime数据筛选,检测手机号是否开通FaceTime的
    FaceTime是苹果公司iOS和macOS(以前称MacOSX或OSX)内置的一款视频通话软件,通过Wi-Fi或者蜂窝数据接入互联网,在两个装有FaceTime的设备之间实现视频通话。其要求通话双方均具有装有FaceTime的苹果设备,苹果ID以及可接入互联网的3G/4G/5G或者Wi-Fi网络。 一、Windows电脑上部署......
  • Selenium模拟登录(数字验证码)+Requests获取json数据
    前言我只是想算算每个月洗澡花了多少钱……Selenium模拟登录登录需要提交账号、密码、验证码#实例化browser=webdriver.Edge()browser.implicitly_wait(10)url1='http://card.cqu.edu.cn/'browser.get(url1)#学工号和密码user_id='学号/工号'user_psd='密码'#输入学......
  • 9.24java wab实现创建新界面验证码
    <!DOCTYPEhtml><html><head><title>UserLogin</title><style>.container{width:300px;margin:0auto;padding:20px;border:1pxsolid#ccc;text-align:center;}.inpu......
  • 如何实现「点击验证码,验证码刷新」的效果?
    在注册或者登录时,因为验证码看不清,用户会想要换一个,方便的方式,是点击验证码,自动更换。思路很简单,只需要在后台获取的验证码输出url,加上时间即可,url变化,验证码自然会跟着刷新。开发环境(java)前台示例:<span><imgid="registerCaptchaImg"src="${pageContext.request.contextPat......