BiliBili等网站极验滑动验证码的详细破解过程

基于selenium自动化的滑动验证码破解

selenium python 验证码


1.环境配置(Linux)

  1. python2.7
  2. pip安装的库:selenium , PIL
  3. Chrome浏览器 , Chromedriver (点击查看详细安装过程

2.示例网站(BiliBili)

https://passport.bilibili.com/login

3.代码整体流程图

在这里插入图片描述

4.完整代码

# -*- coding: utf-8 -*-
import logging
import time
import random
import re
import requests
import urlparse
import pdb
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from PIL import Image
from io import BytesIO
class Bilibili(object):
    """docstring for Bilibili"""
    js="""var keys=document.cookie.match(/[^ =;]+(?=\=)/g);
        if (keys) {
        for (var i = keys.length; i--;)
        document.cookie=keys[i]+'=0;expires=' + new Date( 0).toUTCString()
        } """
    def __init__(self):
        """构造函数"""
        super(Bilibili,self).__init__()
        self.browser=webdriver.Chrome("your chromedrive's path")
        self.browser.set_page_load_timeout(20)
        self.browser.implicitly_wait(10)

    def __del__(self):
        """析构函数"""
        if self.browser is not None:
            self.browser.quit()

    def logging(self,username,password):
        
        self.browser.get("https://passport.bilibili.com/login")
        dom_input_id = self.browser.find_element_by_id("login-username")
        dom_input_keyword = self.browser.find_element_by_id("login-passwd")
        dom_btn_log = self.browser.find_element_by_xpath('//*[@class="btn-box"]/a[1]')
        #pdb.set_trace()
        dom_input_id.send_keys(username)
        dom_input_keyword.send_keys(password)

        flag_success = False
        while not flag_success:
            image_full_bg = self.get_image("gt_cut_fullbg_slice")
            # 下载完整的验证图
            image_bg = self.get_image("gt_cut_bg_slice")
            # 下载有缺口的验证图
            diff_x = self.get_diff_x(image_full_bg, image_bg)
            #pdb.set_trace()
            track = self.get_track(diff_x)
            result = self.simulate_drag(track)
            print result

            if u'验证通过' in result:
                flag_success = True
            elif u'出现错误:' in result:
                self.browser.execute_script('location.reload()')
            elif u'再' in result:
                time.sleep(4)
                continue
            elif u'吃' in result:
                time.sleep(5)
     
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值