首页 > 其他分享 >selenium 解析验证码(普通的字符数字的验证码),解决方式:先将验证码保存为图片,然后使用ddddocr解析图片为验证码的字符串

selenium 解析验证码(普通的字符数字的验证码),解决方式:先将验证码保存为图片,然后使用ddddocr解析图片为验证码的字符串

时间:2023-09-08 14:46:15浏览次数:42  
标签:img selenium driver 验证码 element import 解析 图片

 

from selenium import webdriver
from selenium.webdriver.common.by import By
from PIL import Image
from io import BytesIO
import pytesseract
import time
import ddddocr
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.action_chains import ActionChains
from selenium.common.exceptions import TimeoutException, NoSuchElementException


# 截取验证码,保存
def img_save(img, driver):
    x, y = img.location.values()  # 元素 坐标数据
    h, w = img.size.values()  # 元素高宽
    # 将截图以二进制的形式返回
    img_data = driver.get_screenshot_as_png()
    # 以新图片的形式打开返回的数据
    sreenshots = Image.open(BytesIO(img_data))
    # 对截图进行剪切
    result = sreenshots.crop((x, y, x + w, y + h))  # 元素大小放缩
    # 存储
    imgpath = "code.png"
    result.save(imgpath)
    return imgpath

# 将图片转换为验证码
def img_to_code(imgpath):
    # 创建对象
    ocr = ddddocr.DdddOcr()
    res = ""
    # 使用二进制的方式读取图片
    with open(imgpath, 'rb') as f:
        img_tytes = f.read()
        # 调用识别方法
        res = ocr.classification(img_tytes)
        # print(f'验证码为:{res}')
        return res



if __name__ == '__main__':
    # 访问界面
    url = "https://XXXX/index.php"
    driver = webdriver.Chrome()
    driver.maximize_window()
    driver.get(url)
    
    
    wait = WebDriverWait(driver, timeout=10, poll_frequency=0.5)
    wait.until(expected_conditions.presence_of_element_located(("id", 'codeimage'))) # 验证码的标签
    
    driver.find_element(By.ID, 'user_name').send_keys("lfj")   # 输入【用户名】
    driver.find_element(By.ID, 'password').send_keys("123")    # 输入【密码】

    # 循环获取验证码,知道输入的验证码正确
    while True:
        # 验证码截取、保存
        img = driver.find_element(By.ID, 'codeimage')  # 要截图的元素
        imgpath = img_save(img, driver) # 将验证码的部分使用图片保存
        res = img_to_code(imgpath) # 将图片解析为验证码,每次验证码不一定正确,所以代码逻辑使用循环处理,直到拿到正确的验证码

        driver.find_element(By.ID, 'captcha').send_keys(res) # 输入【验证码】
        driver.find_element(By.XPATH, '//*[@id="pwd_login_form"]/div[5]/input[1]').click() # 点击【登录】
        time.sleep(2)

        # 验证码获取失败,再重新获取
        # 我的网页的情况是当在登录页面时,url里带有login,如果登录成功,则没有login字符串,所以这里采用这样条件来判断是否登录成功
        if "https://XXXX/index.php?app=login" in driver.current_url: # 根据自己的实际网页情况,编写不同的判断条件
            wait = WebDriverWait(driver, timeout=10, poll_frequency=0.5)
            wait.until(expected_conditions.presence_of_element_located(("id", 'codeimage')))
            continue # 如果验证码校验失败,则重新获取验证码
        else:
            break   # 登录成功,则跳出循环,不再获取验证码


    # 后边继续其他的业务逻辑即可。。。。。。。。。。。。。。。
    
    # 下面是我自己的业务逻辑部分,各位根据自己的需求进行编写
    # 进入商户后台
    enter_back = '//ul[@class="home_layout_bar-nav"]/li/a' #进入商户后台的按钮
    wait = WebDriverWait(driver, timeout=10, poll_frequency=0.5)
    wait.until(expected_conditions.presence_of_element_located(("xpath", enter_back)))
    driver.find_element(By.XPATH, enter_back).click()

    driver.quit()

 

标签:img,selenium,driver,验证码,element,import,解析,图片
From: https://www.cnblogs.com/lifengjuan/p/17687534.html

相关文章

  • iOS App上架新规解析:如何进行App备案
    摘要本文将以iOS技术博主的身份,解析iOSApp上架新规中的App备案要求。通过探讨备案对开发者和市场的影响,介绍备案流程和所需材料,帮助开发者了解如何进行App备案。引言近年来,移动应用市场蓬勃发展,但同时也存在着不合规和违法现象。为了确保行业长期健康发展,工信部发布了APP备案新规......
  • python爬虫练习1-百度图片
     写了一个简单的爬图片练习importrequestsimportosdefbd_img(title1):url=f'https://image.baidu.com/search/acjson?tn=resultjson_com&logid=10755979809828115852&ipn=rj&ct=201326592&is=&fp=result&fr=&word={title1}&queryWord......
  • 2.8 PE结构:资源表详细解析
    在WindowsPE中,资源是指可执行文件中存放的一些固定不变的数据集合,例如图标、对话框、字符串、位图、版本信息等。PE文件中每个资源都会被分配对应的唯一资源ID,以便在运行时能够方便地查找和调用它们。PE文件中的资源都被组织成一个树形结构,其中最顶层为根节点(Root),下一级为资源类型......
  • 通过pyshark解析pcap报文
    代码:importpysharkdefextract_dns_info(packet):dns=packet.dnsquery_name=dns.qry_nameifhasattr(dns,'qry_name')elseNonequery_type=dns.qry_typeifhasattr(dns,'qry_type')elseNone#解析响应的IP地址或其他响应内容r......
  • Css 修改图标颜色_Css 修改图片颜色_Css控制图片颜色
    一、Css3mask修改图标颜色(推荐)CSS3mask默认是基于透明度实现遮罩效果的。也就是实色区域显示,透明区域隐藏。因此,我们只需要把目标图标颜色#f4615c作为背景色,然后原始图标(无论什么颜色都可以)作为遮罩图片,效果就出来了。<!DOCTYPEhtml><htmllang="en"><head><meta......
  • 2.8 PE结构:资源表详细解析
    在WindowsPE中,资源是指可执行文件中存放的一些固定不变的数据集合,例如图标、对话框、字符串、位图、版本信息等。PE文件中每个资源都会被分配对应的唯一资源ID,以便在运行时能够方便地查找和调用它们。PE文件中的资源都被组织成一个树形结构,其中最顶层为根节点(Root),下一级为资源类......
  • Nginx_(背锅)解析漏洞复现
    目录Nginx解析漏洞复现1.1、漏洞描述1.2、漏洞等级1.3、影响版本1.4、漏洞复现1、基础环境2、漏洞扫描3、漏洞验证1.5、深度利用GetShellNginx解析漏洞复现说明内容漏洞编号漏洞名称漏洞评级影响范围漏洞描述Nginx解析漏洞该解析漏洞是PHPCGI的......
  • Apache HTTPD-换行解析漏洞(CVE-2017-15715)
    目录ApacheHTTPD-换行解析漏洞(CVE-2017-15715)1.1、漏洞描述1.2、漏洞等级1.3、影响版本1.4、漏洞复现1、基础环境2、漏洞扫描3、漏洞验证1.5、深度利用GetShell1.6、修复建议ApacheHTTPD-换行解析漏洞(CVE-2017-15715)说明内容漏洞编号CVE-2017-15715漏洞名称Apac......
  • Apache HTTPD-未知后缀名解析
    目录ApacheHTTPD-未知后缀名解析ApacheHTTPD-未知后缀名解析upload-labs/Pass-07上传1.php文件<?php@eval($_REQUEST[6868]);phpinfo();?>访问/upload/1.php.jaychou蚁剑连接......
  • 综合评价招生详细解析
    1、综合评价招生: 1、综合评价招生是指部分省份在全国率先启动的高校招生改革重要举措,即高校拿出一定比例招生名额,实行以学业水平考试成绩、高考成绩、和 学校综合测试成绩三种成绩,并按一定比例计算出综合成绩后,择优录取考生的一种录取形式:是一种融合学业水平测试、综......