前言
请勿用于商务用途哦,仅限于学习,否则后果自负哦
有两篇关于极验验证滑块破解的文章,在此分享一下:
https://www.jianshu.com/p/c8df1194b514
https://www.jianshu.com/p/f12679a63b8d
这两篇文章针对不同滑块,有不同的寻找缺口的以及滑动的方法,收益颇多。
本博客是基于第一篇文章上写的,寻找缺口的方法和滑动的方法是一模一样的。唯一不同是,保存图片的方式,第一篇文章有图片的链接地址,并且图片是乱序的。我这里是canvas。所以这里只介绍前半部分,后半部分寻找缺口以及滑动距离,请大家参考原文。
正文
爬取的网址:https://www.binance.co/login.html
首先,可以看到图片是以canvas的形式呈现出来的,所以无法进行下载保存到本地。
其次,我们要找到有缺口的图片以及完整的图片。
仔细观察class的名字,可以很明显的发现,geetest_canvas_bg 是有缺口的背景图,geetest_canvas_slice是那一小块缺口,geetest_canvas_fullbg是完整的图片,有注意到我绿色框框吗,你只要把这个删掉,就可以看到完整的图片,css把它隐藏了而已,实际上它是存在的。
参考了第一种方式,所以我这里需要下载,有缺口的背景图以及完整的图片,具体实现方法如下
def save_img(self, img_name, class_name):
# img_name 是保存图片的名字,class_name 是需要保存的canvas的className
getImgJS = 'return document.getElementsByClassName("' + class_name + '")[0].toDataURL("image/png");'
img = self.driver.execute_script(getImgJS)
base64_data_img = img[img.find(',') + 1:]
image_base = base64.b64decode(base64_data_img)
file = open(img_name, 'wb')
file.write(image_base)
file.close()
其它没有多大的改动,这里距离可能要根据具体情况进行调节,在方法start_move里面,我把distance调高了点,变成:distance += 25。
以下是全部代码
import random
import time, re
from selenium import webdriver
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.action_chains import ActionChains
from PIL import Image
import base64
'''
极验验证滑块3.0版本
'''
class Binance(object):
def __init__(self):
chrome_option = webdriver.<