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))
首先,我们需要从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)