第一次体验被催稿,啊哈哈哈哈哈哈
话不多说 先看本次我们破解的滑块验证码网站
https://www.cods.org.cn/
我们在这个网站里随便搜一个字段就会弹出个滑块验证码
一看这个验证码是不是心里一句我擦就出现了
不慌
接下来我们就慢慢分析这个验证码:
我们首先打开f12 看看这个验证码是url请求回来的还是后端返回的
我们定位滑块验证码的位置会看见这两个代码:
其实这段代码把图片的原图和缺口图都放在里面了只是我们看不见
那我们应该怎么才能看见喃
我们只需要在它的css里添加一段代码
我们就惊奇的发现验证码图片怎么不在了
我们只是加了一句style=“display:none”就看不见了那我们在原图上加style=“display:block"会怎么样喃
没错就是下面这样
那么我们就可以更改css属性然后用selenium的截图办法 把原图和缺口图都保存下来
我们在拿着这两个图的像素一对比不就找到缺口图了吗?
部分完整代码如下:
注入js修改css参数和截图
ele = driver.find_elements_by_tag_name('canvas')
driver.execute_script(
'document.getElementsByClassName("geetest_canvas_slice geetest_absolute")[0].style.display="none"')
##得到有缺口的图片
ele[0].screenshot('qk.png')
##缺口图片
driver.execute_script(
'document.getElementsByClassName("geetest_canvas_bg geetest_absolute")[0].style.display="none"')
##得到有缺口的图片
driver.execute_script(
'document.getElementsByClassName("geetest_canvas_fullbg geetest_fade geetest_absolute")[0].style.display="block"')
##得到完整有的图片
ele[2].screenshot('wz.png')
##完整图片
####得到图片后要把参数变回去
driver.execute_script(
'document.getElementsByClassName("geetest_canvas_slice geetest_absolute")[0].style.display="block"')
driver.execute_script(
'document.getElementsByClassName("geetest_canvas_bg geetest_absolute")[0].style.display="block"')
driver.execute_script(
'document.getElementsByClassName("geetest_canvas_fullbg geetest_fade geetest_absolute")[0].style.display="none"')
time.sleep(1)
然后就是像素对比了
def one():
img1 = Image.open("wz.png")
img2 = Image.open("qk.png")
left = 60
for i in range(left, img1.size[0]):
for j in range(img1.size[1]):
if not is_px_equal(img1, img2, i, j):
left = i
return left
return left
def is_px_equal(img1, img2, x, y):
"""
判断两个像素是否相同
:param img1: 图片1
:param img2:图片2
:param x:位置1
:param y:位置2
:return:像素是否相同
"""
pix1 = img1.load()[x, y]
pix2 = img2.load()[x, y]
threshold = 60
if abs(pix1[0] - pix2[0]) < threshold and abs(pix1[1] - pix2[1]) < threshold and abs(pix1[2] - pix2[2]) < threshold:
return True
else:
return False
然后返回的left就是我们需要滑动的距离(可微调这个网址在我朋友的测试下是0.79最稳定)
需要用的的库为
import numpy as np
import cv2
from PIL import Image
看看效果
完美
好了今天就到这儿了
下次分析个找不到原图的方法给大家
啊哈哈哈