playwright可使用的图像验证码

 安装组件

pip install ddddocr
# 如果安装失败,可使用国内使用
pip install ddddocr -i https://pypi.tuna.tsinghua.edu.cn/simple

在使用前,将打印内容注释,要不在每次使用时都会打印内容 

from playwright.sync_api import Playwright, sync_playwright, expect, TimeoutError
import ddddocr
import time
from datetime import datetime

# 获取当前时间戳和日期字符串
current_timestamp = int(time.time())
datetime_now = datetime.now()
new_time = datetime_now.strftime("%Y-%m-%d")
ocr = ddddocr.DdddOcr(show_ad=False)
URL = "http://172.0.0.1:8081"    # 替换访问URL
DEFAULT_TIMEOUT = 2000


class LoginManager:
    def __init__(self):
        """初始化登录管理器"""
        self.ocr = ddddocr.DdddOcr()
        self.timestamp = int(time.time())
        self.date_str = datetime.now().strftime("%Y-%m-%d")
    def launch_browser(self, playwright):
        """
        启动浏览器并创建一个新的页面上下文。
        :param playwright: Playwright 实例
        :return: 浏览器实例、上下文实例和页面实例
        """
        browser = playwright.chromium.launch(headless=False)  # 设置 headless=False 以便查看操作过程
        context = browser.new_context()  # 创建新的浏览器上下文
        context.set_default_timeout(DEFAULT_TIMEOUT)  # 设置默认超时时间为10秒
        page = browser.new_page()  # 打开一个新的页面
        return browser, context, page


    def take_screenshot_and_ocr(self, page, locator, timestamp):
        """
        截图并使用 OCR 识别验证码。
        :param page: 页面实例
        :param locator: 验证码元素的定位器
        :param timestamp: 时间戳用于生成唯一的文件名
        :return: 识别出的验证码文本
        """
        path_img = f"../img/loginMaskLi{timestamp}.png"
        page.locator(locator).screenshot(path=path_img)  # 截图验证码区域
        with open(path_img, 'rb') as f:
            img_bytes = f.read()
            result = ocr.classification(img_bytes)  # 使用 OCR 识别验证码
        return result

    def login(self, page):
        """
        登录系统。
        :param page: 页面实例
        """
        page.goto(URL + "/asset/#/login")  # 导航到登录页面
        page.wait_for_timeout(DEFAULT_TIMEOUT)
        page.fill("input[formcontrolname='username']", username)  # 填写用户名 输入内容
        page.fill("input[formcontrolname='password']", password)  # 填写密码

        for attempt in range(10):  # 最多尝试3次
            captcha_text = self.take_screenshot_and_ocr(page, '#loginMaskLi', current_timestamp)  # 识别验证码
            print(f"识别的验证码为: {captcha_text}")
            page.fill('input[formcontrolname="code"]', captcha_text)  # 输入验证码

备注:

        元素根据实际情况更改

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值