基于selenium自动化的滑动验证码破解
selenium python 验证码
1.环境配置(Linux)
- python2.7
- pip安装的库:selenium , PIL
- 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)