python3爬蟲實戰【點觸驗證碼】 — 模擬登陸bilibili
爬蟲思路如下:
利用自動化爬蟲工具 selenium 模擬點選輸入等操作來進行登入
分析頁面,獲取點觸驗證碼的點觸,通過將傳送給超級鷹打碼平台識別後獲取座標資訊
根據超級鷹返回的資料,模擬座標的點選,即可實現登入
一.準備工作
在開始之前,需要先註冊乙個超級鷹賬號並申請乙個軟體id,註冊頁面鏈結為:註冊完成後需要在後台新增乙個軟體id,進行充值獲得積分,一般充一塊錢就可以了。
二.爬蟲構建
importrandom
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驗證碼 漢字等。無聊,對於道德家來說是乙個嚴重的題目,因為人類的罪惡折半以上都是源於對它的膽怯。對於錯雜靠山的,然則字型是同一色彩的,我們可以統計每...