写在前面:
其实本程序还有很多需要完善和改进的地方,后面会进行完善,大家多多包涵
概述
-
通过完整图片与缺失滑块的图片进行像素对比,确定滑块位置
-
边缘检测算法,确定位置
-
规避检测,模拟人的行为进行滑动滑块
实现
-这里以带刷网为例,展示验证码滑动的效果
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2021/1/2 18:34
# @Author : huni
# @File : 验证码2.py
# @Software: PyCharm
from selenium import webdriver
import time
import base64
from PIL import Image
from io import BytesIO
from selenium.webdriver.support.ui import WebDriverWait
import random
import copy
class VeriImageUtil():
def __init__(self):
self.defaultConfig = {
"grayOffset": 20,
"opaque": 1,
"minVerticalLineCount": 30
}
self.config = copy.deepcopy(self.defaultConfig)
def updateConfig(self, config):
# temp = copy.deepcopy(config)
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 =

这篇博客介绍了使用Python和selenium库来破解极验滑块验证码的方法,包括通过像素对比和边缘检测算法确定滑块位置,以及模拟人类行为进行滑动,以规避检测。
最低0.47元/天 解锁文章
1935

被折叠的 条评论
为什么被折叠?



