Python破解BiliBili滑块验证码,完美避开人机识别

文章讲述了如何通过模仿人手操作的方式,结合边缘检测技术,解决B站滑块验证码的反爬限制问题。作者提供了一系列的模拟拖拽函数,包括固定距离、修正误差以及随机化拖动策略,以提高验证成功率并避免被机器识别为机器人。
摘要由CSDN通过智能技术生成

for k in self.config:

if k in config.keys():

self.config[k] = config[k]

def getMaxOffset(self, *args):

计算偏移平均值最大的数

av = sum(args) / len(args)

maxOffset = 0

for a in args:

offset = abs(av - a)

if offset > maxOffset:

maxOffset = offset

return maxOffset

def isGrayPx(self, r, g, b):

是否是灰度像素点,允许波动offset

return self.getMaxOffset(r, g, b) < self.config[“grayOffset”]

def isDarkStyle(self, r, g, b):

灰暗风格

return r < 128 and g < 128 and b < 128

def isOpaque(self, px):

不透明

return px[3] >= 255 * self.config[“opaque”]

def getVerticalLineOffsetX(self, bgImage):

bgImage = Image.open(“./image/bg.png”)

bgImage.im.mode = ‘RGBA’

bgBytes = bgImage.load()

x = 0

while x < bgImage.size[0]:

y = 0

点》》线,灰度线条数量

verticalLineCount = 0

while y < bgImage.size[1]:

px = bgBytes[x, y]

r = px[0]

g = px[1]

b = px[2]

alph = px[3]

print(px)

if self.isDarkStyle(r, g, b) and self.isGrayPx(r, g, b) and self.isOpaque(px):

verticalLineCount += 1

else:

verticalLineCount = 0

y += 1

continue

if verticalLineCount >= self.config[“minVerticalLineCount”]:

连续多个像素都是灰度像素,直线

print(x, y)

return x

y += 1

x += 1

pass

if name == ‘main’:

bgImage = Image.open(“./image/bg.png”)

veriImageUtil = VeriImageUtil()

veriImageUtil.updateConfig({

“grayOffset”: 20,

“opaque”: 0.6,

“minVerticalLineCount”: 10

})

bgOffsetX = veriImageUtil.getVerticalLineOffsetX(bgImage)

print("bgOffsetX:{} ".format(bgOffsetX))

使用selenium进行滑动验证(会失败)


首先,我们需要从html中获取滑块验证的图片,通过执行js,将画布像素转为base64,然后python即可获取,进行拖拽处理:

from selenium import webdriver

import time

import base64

from PIL import Image

from io import BytesIO

from selenium.webdriver.support.ui import WebDriverWait

def checkVeriImage(driver):

WebDriverWait(driver, 5).until(

lambda driver: driver.find_element_by_css_selector(‘.geetest_canvas_bg.geetest_absolute’))

time.sleep(1)

im_info = driver.execute_script(

‘return document.getElementsByClassName(“geetest_canvas_bg geetest_absolute”)[0].toDataURL(“image/png”);’)

拿到base64编码的图片信息

im_base64 = im_info.split(‘,’)[1]

转为bytes类型

im_byt

OpenCV是一个开源的计算机视觉库,提供了丰富的图像处理和计算机视觉功能。而Python是一种简洁易用的编程语言,对于科学计算和图像处理有着广泛的应用。 针对滑块验证这个具体问题,OpenCV和Python可以很好地进行处理。滑块验证是一种常见的验证码形式,要求用户通过拖动滑块来验证身份。使用OpenCV和Python可以实现以下几个步骤: 1. 加载验证码图片:使用OpenCV的图像读取函数,可以将验证码图片加载到Python中进行处理。 2. 图像预处理:对于验证码图片,可能需要进行一些预处理的操作,例如去除噪点、二值化等。OpenCV提供了各种图像处理函数,可以方便地对图像进行预处理。 3. 检测滑块位置:根据滑块的特征,可以使用OpenCV的目标检测算法或者模板匹配算法来定位滑块在图片中的位置。 4. 用户交互:通过Python的图形界面库,可以创建一个用户界面,显示验证码图片和滑块,并获取用户的拖动操作。 5. 验证结果:根据用户的拖动位置,可以计算滑块的位置和验证码图片中滑块真实位置的差异。如果滑块的位置与真实位置匹配,则验证通过。 总体来说,利用OpenCV和Python可以方便地处理滑块验证问题。通过图像处理和计算机视觉算法,可以实现验证码图片的加载、预处理、滑块位置的检测,以及用户交互和验证结果的计算。这对于网站和应用程序中的验证码识别和用户身份验证具有重要的应用价值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值