本文章主要介绍 如何使用pyppeteer破解滑块验证码,主要分为3个步骤:
1.下载滑块验证码的原图和缺口图片。
2.计算缺口偏移量
3.模拟滑块滑动,并处理结果
首先这次的目标网站是国家企业标准网:http://www.qybz.org.cn/standardProduct/toAdvancedResult.do(该网站已经改变,滑块处理逻辑还是通用)
这个网站打开的时候就有一个滑块验证码需要点击,首先是获取原图和缺口图
import asyncio
import base64
import random
import time
from parsel import Selector
from PIL import Image, ImageChops
import matplotlib.pyplot as plt
from pyppeteer import launch
async def get_pic(page):
'''获取图片 '''
fulljs = """
() => { return document.getElementsByClassName("geetest_canvas_fullbg")[0].toDataURL("image/png") }
"""
fadejs = """
() => { return document.getElementsByClassName("geetest_canvas_bg geetest_absolute")[0].toDataURL("image/png")}
"""
full_img = await page.evaluate(fulljs)
await get_decode_image(filename="./img/fullbg.png", data=full_img)
await asyncio.sleep(0.1)
fade_img = await page.evaluate(fadejs)
await get_decode_image(filename="./img/fadebg.png", data=fade_img)
async def get_decode_image(filename, data):
_, img = data.split(",")
img = base64.b64decode(img)
with open(filename, "wb") as f:
f.write(img)
图片样例:
接下来就是计算缺口的距离:
async def compute_gap(img1, img2):
plt.cla()
img1 = Image.open(img1)
img2 = Image.open(img2)
# 将图片修改为RGB模式
img1 = img1.convert(