JAVA架构师修炼

python 破解 抖店 滑块 + 获取加密数据

滑块是最 爬虫很头疼的问题。今天我们就要落地解决这个问题!!!

效果展示

这是我爬的 抖店后台订单数据(只是爬到数据,并没有提供给商业!!!):


今天主要是介绍如何破解登录的滑块,此方法也适应所有的类似滑块的网站

核心思想步骤

  • 下载滑块,滑块背景图,存储到本地。
  • 图像识别滑块到背景缺口的横向距离(关键)。
  • 根据距离算出移动的轨迹数组。
  • ActionChains 模拟鼠标按下,移动,松开。


下载滑块逻辑

通过visibility_of_element_located 拿到元素, 然后获取src属性,就是图片地址,然后通过requests下载图片(没有src的,可以通过获取元素的location截图来实现)。


 def download_slider_bg(self):

        # 下载 背景图片

        Logs.i("正在下载滑块背景图片...")

        bg = self.chrome.visibility_of_element_located(

            id='captcha-verify-image')

        r = requests.get(bg.get_attribute('src'), stream=True)

        if r.status_code == 200:

            open(self.slider_bg, 'wb').write(r.content)

            Logs.i("下载滑块背景图片成功")

            return bg

        raise RuntimeError('滑块背景图片下载不成功 : ' + bg.get_attribute('src'))



    def download_slider(self):

        Logs.i("正在下载滑块图片...")

        bg = self.chrome.visibility_of_element_located(

            class_name='captcha_verify_img_slide')

        r = requests.get(bg.get_attribute('src'), stream=True)

        if r.status_code == 200:

            open(self.slider, 'wb').write(r.content)

            Logs.i("下载滑块图片成功")

            return bg

        raise RuntimeError('滑块图片下载不成功 : ' + bg.get_attribute('src'))

图像识别逻辑

图像识别利用了python库, 代码可以找我索取,但是要付费。 我研究也不容易啊(花了一个多星期)~~~~~

完整代码下载:

抖店滑块自动化 源码下载

生成人为轨迹逻辑

 def ease_out_expo(self, x):

        if x == 1:

            return 1

        else:

            return 1 - pow(2, -10 * x)



    def _get_track(self, distance):

        '''

        获取滑动轨迹

        :param distance: 滑块的滑动距离

        :param seconds: 滑动的相对时间

        :return:滑动轨迹

        '''

        tracks = [0]

        offsets = [0]

        for t in np.arange(0.0, 3, 0.1):

            offset = round(self.ease_out_expo(t / 3) * distance)

            tracks.append(offset - offsets[-1])

            offsets.append(offset)

        return tracks

模拟鼠标逻辑

 def move_slider(self, tracks):

        move_btn = self.chrome.element_to_be_clickable(

            class_name='secsdk-captcha-drag-icon')

        self.chrome.actions().click_and_hold(move_btn).perform()

        for x in tracks:

            Logs.i("正在移动滑块...  x:" + str(x))

            self.chrome.actions().move_by_offset(xoffset=x, yoffset=0).perform()

        time.sleep(1)

        self.chrome.actions().release().perform()

完整代码下载:

抖店滑块自动化 源码下载