python破解b站驗證碼實現登陸

2022-07-01 19:45:12 字數 3647 閱讀 7506

python3爬蟲實戰【點觸驗證碼】 — 模擬登陸bilibili

爬蟲思路如下:

利用自動化爬蟲工具 selenium 模擬點選輸入等操作來進行登入

分析頁面,獲取點觸驗證碼的點觸,通過將傳送給超級鷹打碼平台識別後獲取座標資訊

根據超級鷹返回的資料,模擬座標的點選,即可實現登入

一.準備工作

在開始之前,需要先註冊乙個超級鷹賬號並申請乙個軟體id,註冊頁面鏈結為:註冊完成後需要在後台新增乙個軟體id,進行充值獲得積分,一般充一塊錢就可以了。

二.爬蟲構建

import

random

import

time

from io import

bytesio

import

requests

from pil import

image

from selenium import

webdriver

from selenium.webdriver import

actionchains

from selenium.webdriver.common.by import

byfrom selenium.webdriver.support.ui import

webdriverwait

from selenium.webdriver.support import

expected_conditions as ec

from b站登陸.chaojiying import chaojiying_client #

超級鷹api

username = '

b站賬號

'password = '

b站密碼

'chaojiying_username = '

超級鷹賬號

'chaojiying_password = '

超級鷹密碼

'chaojiying_soft_id =軟體id

chaojiying_kind = 9005 #

驗證碼型別

class

cracktouclick():

def__init__

(self):

self.url = '

'self.browser =webdriver.chrome()

self.browser.maximize_window()

self.wait = webdriverwait(self.browser, 20)

self.username =username

self.password =password

defopen(self):

"""開啟網頁輸入使用者名稱密碼

:return: none

"""self.browser.get(self.url)

user = self.wait.until(ec.presence_of_element_located((by.id, '

login-username

')))

password = self.wait.until(ec.presence_of_element_located((by.id, '

login-passwd

')))

user.send_keys(self.username)

password.send_keys(self.password)

login_btn = self.wait.until(ec.presence_of_element_located((by.css_selector, '

a.btn.btn-login

')))

#隨機暫停幾秒

time.sleep(random.random() * 3)

#點選登陸按鈕

login_btn.click()

defpick_code(self):

time.sleep(3)

pick_img_label = self.browser.find_element_by_css_selector('

img.geetest_item_img

') #

獲取點觸標籤

src = pick_img_label.get_attribute('

src') #

獲取點觸鏈結

img_content = requests.get(src).content #

獲取二進位制內容

f =bytesio()

f.write(img_content)

img0 = image.open(f) #

將以檔案的形式開啟,主要是為了獲取的大小

scale = [pick_img_label.size['

width

'] /img0.size[0],

pick_img_label.size[

'height

'] / img0.size[1]] #

獲取與瀏覽器該標籤大小的比例

cjy =chaojiying_client(chaojiying_username, chaojiying_password, chaojiying_soft_id)

result = cjy.postpic(img_content, '

9005

') #

傳送並獲取結果

if result['

err_no

'] == 0: #

對結果進行分析

position = result['

pic_str

'].split('

|') #

position = ['110,234','145,247','25,185']

position = [[int(j) for j in i.split('

,')] for i in position] #

position = [[110,234],[145,247],[25,185]]

for items in position: #

模擬點選

actionchains(self.browser).move_to_element_with_offset(pick_img_label, items[0] *scale[0],

items[1] * scale[1]).click().perform()

time.sleep(1)

time.sleep(2)

#點選登入

certern_btn = self.browser.find_element_by_css_selector('

div.geetest_commit_tip')

certern_btn.click()

return

cjy, result

defcrack(self):

"""破解入口

:return: none

"""self.open()

self.pick_code()

if__name__ == '

__main__':

crack =cracktouclick()

crack.crack()

驗證碼破解

驗證碼的功能一般是防止使用程式惡意註冊 暴力破解或批量發帖而設定的。所謂驗證碼,就是將一串隨機產生的數字或符號,生成一幅,裡加上一些干擾象素 防止ocr 由使用者肉眼識別其中的驗證碼資訊,輸入表單提交 驗證,驗證成功後才能使用某項功能。學習驗證碼的破解 識別技術,不僅可以知道驗證碼的原理,而且可以讓...

驗證碼破解

目錄1xx 訊息,一般是告訴客戶端,請求已經收到了,正在處理,別急.2xx 處理成功,一般表示 請求收悉 我明白你要的 請求已受理 已經處理完成等資訊.3xx 重定向到其它地方。它讓客戶端再發起乙個請求以完成整個處理。4xx 處理發生錯誤,責任在客戶端,如客戶端的請求乙個不存在的資源,客戶端未被授權...

驗證碼破解的辦法,簡單驗證碼破解演示

人世間,比芳華再可名貴的器材其實沒有,然而芳華也最輕易消失 誰能對峙得永遠的芳華的,便是巨大的人。對於錯雜的驗證碼,地位隨機 扭曲 模糊 干擾項 gif驗證碼 漢字等。無聊,對於道德家來說是乙個嚴重的題目,因為人類的罪惡折半以上都是源於對它的膽怯。對於錯雜靠山的,然則字型是同一色彩的,我們可以統計每...