DrissionPage过滑块验证码
结合DrissionPage浏览器自动化与OpenCV图像处理技术实现滑动验证码破解
·
from DrissionPage import Chromium
import cv2
import requests
def identify_gap(bg_src, sl_src):
'''
bg: 背景图片
tp: 缺口图片
'''
# 读取背景图片和缺口图片
slice_content = requests.get(url=sl_src).content
bg_content = requests.get(url=bg_src).content
with open('./bg_image.jpg', 'wb') as f:
f.write(bg_content)
with open('./front_image.png', 'wb') as f:
f.write(slice_content)
bg_img = cv2.imread('./bg_image.jpg') # 背景图片
tp_img = cv2.imread('./front_image.png') # 缺口图片
# 识别图片边缘
bg_edge = cv2.Canny(bg_img, 100, 200)
tp_edge = cv2.Canny(tp_img, 100, 200)
# 转换图片格式
bg_pic = cv2.cvtColor(bg_edge, cv2.COLOR_GRAY2RGB)
tp_pic = cv2.cvtColor(tp_edge, cv2.COLOR_GRAY2RGB)
# 缺口匹配
res = cv2.matchTemplate(bg_pic, tp_pic, cv2.TM_CCOEFF_NORMED)
# 寻找最优匹配
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)
# 左上角点的坐标
tl = max_loc
# print(tl[0])
# 返回缺口的X坐标
return tl[0]
# 连接浏览器并获取浏览器对象
browser = Chromium()
# 获取标签页对象并打开网址
tab = browser.new_tab('https://dun.163.com/trial/jigsaw')
tab.wait.eles_loaded('xpath:/html/body/main/div[1]/div/div[2]/div[2]/div[1]/div[1]/div/div/div[2]/div[3]/div/div/div[2]/div[3]')
xpath = 'xpath:/html/body/main/div[1]/div/div[2]/div[2]/div[1]/div[1]/div/div/div[2]/div[3]/div/div/div[2]/div[2]'
slide = tab.ele(xpath)
bg_src = tab.ele('xpath:/html/body/main/div[1]/div/div[2]/div[2]/div[1]/div[1]/div/div/div[2]/div[3]/div/div/div[1]/div/div[1]/img[1]').attr('src')
sl_src = tab.ele('xpath:/html/body/main/div[1]/div/div[2]/div[2]/div[1]/div[1]/div/div/div[2]/div[3]/div/div/div[1]/div/div[1]/img[2]').attr('src')
print(bg_src,sl_src)
distance = identify_gap(bg_src, sl_src)
print(bg_src,sl_src,distance)
tab.actions.hold(slide).move_to(slide).hold(slide).move(offset_x=distance+6,offset_y=3,duration=1).release()
# print(slide)
更多推荐
所有评论(0)