python 滑动验证码破解

示例代码:

from PIL import Image
import imagehash
def img_simi(img_url,arr):
    simi = 0
    simi_img = ''
    for img in arr:
        # 生成图像的感知哈希
        hash1 = imagehash.average_hash(Image.open(img_url))
        hash2 = imagehash.average_hash(Image.open(img))
        # 计算相似度
        similarity = 1 - (hash1 - hash2) / len(hash1.hash)  # 范围为0到1,值越大表示相似度越高
        if similarity > simi:
            simi = similarity
            simi_img = img
    return simi_img


from flask import Blueprint,request
from utils.entity import r
import aiohttp,base64
from io import BytesIO
from PIL import Image
import ddddocr

async def sendMsgAuto():
    email = '邮箱账号'
    async with aiohttp.ClientSession(connector=aiohttp.TCPConnector(limit=64, verify_ssl=False)) as session:
        async with session.get('初始化滑动验证码的接口') as resp:
            result = await resp.json()
            result = result['data']
            # 去除base64数据的前缀
            prefix, data = result['img'].split(',', 1)
            # 解码base64数据
            decoded_data = base64.b64decode(data)
            # 使用BytesIO将字节数据转为文件对象
            image_file = BytesIO(decoded_data)
            # 使用PIL创建图片
            image = Image.open(image_file)
            bg = image.crop([0,0,340,190])
            bg.save('bg.png')
            target = image.crop([4,196,56,246])
            target.save('target.png')
            bg_origin = img_simi('bg.png',['layer01.jpg','layer02.jpg','layer03.jpg'])
            det = ddddocr.DdddOcr(det=False,ocr=True,show_ad=False)
            with open('target.png','rb') as f:
                target_bytes = f.read()
            with open(bg_origin,'rb') as f:
                background_bytes = f.read()
            res = det.slide_match(target_bytes,background_bytes,simple_target=True)
            value = res['target'][0]
            async with session.post('验证滑动验证码接口',data={
                'value': value,
                'key': result['key'],
                'email': email
            }) as resp1:
                data = await resp1.text()
                return r(code=200, msg='success', data=data)


  • 6
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Python实现滑动验证码的方法比较多,我这里介绍一种基于Selenium和OpenCV的方案。 1. 首先,我们需要使用Selenium打开目标网站,并进入验证码页面。 2. 然后,我们需要使用Selenium获取验证码图片,并使用OpenCV对其进行处理,得到需要滑动的区域。 3. 接下来,我们需要使用Selenium模拟鼠标滑动操作,将滑块滑动到正确的位置。 具体实现细节可以参考下面的代码示例: ```python import time import cv2 import numpy as np from selenium import webdriver from selenium.webdriver import ActionChains # 打开浏览器并进入目标网站 driver = webdriver.Chrome() driver.get("https://www.example.com/") # 进入验证码页面 driver.find_element_by_xpath("//a[text()='验证码']").click() # 获取验证码图片 captcha = driver.find_element_by_xpath("//div[@class='captcha']/img") captcha.screenshot("captcha.png") # 对验证码图片进行处理,得到需要滑动的区域 img = cv2.imread("captcha.png") gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) ret, thresh = cv2.threshold(gray, 100, 255, cv2.THRESH_BINARY) contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) x, y, w, h = cv2.boundingRect(contours[0]) # 模拟鼠标滑动操作 slider = driver.find_element_by_xpath("//div[@class='slider']") action = ActionChains(driver) action.click_and_hold(slider).perform() action.move_by_offset(x + w / 2, y + h / 2).perform() time.sleep(0.5) action.release().perform() # 关闭浏览器 driver.quit() ``` 需要注意的是,这种方法可能会被一些网站的反爬机制检测到,所以在实际应用中需要根据具体情况进行调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

某公司摸鱼前端

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值