爬蟲 之 打碼平臺

爬蟲驗(yàn)證碼中還是有很多的特別難破解的,比如BT的12306

1-1

哈哈~,是不是被難倒了,沒關(guān)系,這次說的是打碼平臺,可以有效解決這類問題。

這次主要說說超級鷹:http://www.chaojiying.com/,進(jìn)去之后呢,首先要找到開發(fā)文檔


1-2

下載即可,里面的內(nèi)容還是很簡潔和容易理解的,這里就不詳細(xì)說明了,下載完后之后把超級鷹開發(fā)文檔和你的代碼放在同級目錄下,然后就開始進(jìn)入正題吧。

以這個url為例:https://kyfw.12306.cn/otn/login/init

1-3

打開大概就是這個樣子,我們要先獲取到驗(yàn)證碼圖片

browser = webdriver.Chrome()

browser.get(url)

time.sleep(15)

img = browser.find_element_by_class_name('touclick-image')

延時稍微長了一點(diǎn),為了防止驗(yàn)證碼圖片加載不出來,然后我們需要這個驗(yàn)證碼圖片的左上角和右下角的坐標(biāo)。

left = img.location['x']#驗(yàn)證碼圖片左上角橫坐標(biāo)

top? ? = img.location['y']#驗(yàn)證碼圖片左上角縱坐標(biāo)

right? = left + img.size['width']#驗(yàn)證碼圖片右下角橫坐標(biāo)

bottom = top + img.size['height']#驗(yàn)證碼圖片右下角縱坐標(biāo)

將驗(yàn)證碼圖片保存成二進(jìn)制文件,因?yàn)槌夲椖沁咈?yàn)證需要傳入驗(yàn)證碼圖片的二進(jìn)制數(shù)據(jù)。

#頁面快照

screenshot = browser.get_screenshot_as_png()

#打開快照文件

screenshot = Image.open(BytesIO(screenshot))

#截取驗(yàn)證碼圖片

captcha = screenshot.crop((left, top, right, bottom))

captcha.save("./name.png")

bytes_array = BytesIO()

#圖片二進(jìn)制

captcha.save(bytes_array,format='PNG')

這一步有點(diǎn)看不懂的可以看我的另一片文章 爬蟲 之 驗(yàn)證碼(一),里面比較詳細(xì)一點(diǎn)。

然后超級鷹要登場了

chaojiying = Chaojiying(賬號, 密碼, id) ? ?? #id 請參考圖片1-4

result = chaojiying.post_pic(bytes_array.getvalue(), 驗(yàn)證碼類型編號) ?? #二進(jìn)制數(shù)據(jù)和類型編號,類型編號請參考圖片1-5


1-4
1-5

最后就是處理一下超級鷹返回的結(jié)果,模擬點(diǎn)擊即可

#驗(yàn)證碼結(jié)果進(jìn)行解析

groups = result.get('pic_str').split('|')

#遍歷驗(yàn)證結(jié)果,再用逗號切分變量后的驗(yàn)證結(jié)果,轉(zhuǎn)換成整數(shù)

locations = [[int(number)for numberin group.split(',')]for groupin groups]

for locationin locations:

????print(location)

????# 當(dāng)前頁面點(diǎn)擊,move_to_element_with_offset:把鼠標(biāo)移動到某個偏移量 ? 的 ? 位 ? 置, ? ? 相對于圖片左上角的位置,perform()連續(xù)執(zhí)行

? ? ActionChains(browser).move_to_element_with_offset(img, location[0],location[1]).click().perform()

????time.sleep(1)

最后附上源碼和運(yùn)行結(jié)果

import time

from seleniumimport webdriver

from PILimport Image

from ioimport BytesIO

from selenium.webdriverimport ActionChains

from chaojiyingimport Chaojiying

EMAIL ='賬號'

PASSWORD ='密碼'

CHAOJIYING_SOFT_ID ="id"

CHAOJIYING_KIND =9004

#賬號、密碼、解碼類型編號

chaojiying = Chaojiying(EMAIL, PASSWORD, CHAOJIYING_SOFT_ID)

url ='https://kyfw.12306.cn/otn/login/init'

browser = webdriver.Chrome()

browser.get(url)

time.sleep(15)

img = browser.find_element_by_class_name('touclick-image')

left? = img.location['x']#驗(yàn)證碼圖片左上角橫坐標(biāo)

top? ? = img.location['y']#驗(yàn)證碼圖片左上角縱坐標(biāo)

right? = left + img.size['width']#驗(yàn)證碼圖片右下角橫坐標(biāo)

bottom = top + img.size['height']#驗(yàn)證碼圖片右下角縱坐標(biāo)

print(left, top, right, bottom)

#頁面快照

screenshot = browser.get_screenshot_as_png()

#打開快照文件

screenshot = Image.open(BytesIO(screenshot))

#截取驗(yàn)證碼圖片

captcha = screenshot.crop((left, top, right, bottom))

captcha.save("./name.png")

bytes_array = BytesIO()

#圖片二進(jìn)制

captcha.save(bytes_array,format='PNG')

result = chaojiying.post_pic(bytes_array.getvalue(), CHAOJIYING_KIND)

#驗(yàn)證碼結(jié)果進(jìn)行解析

groups = result.get('pic_str').split('|')

#遍歷驗(yàn)證結(jié)果,再用逗號切分變量后的驗(yàn)證結(jié)果,轉(zhuǎn)換成整數(shù)

locations = [[int(number)for numberin group.split(',')]for groupin groups]

for locationin locations:

????print(location)

????# 當(dāng)前頁面點(diǎn)擊,move_to_element_with_offset:把鼠標(biāo)移動到某個偏移量的位置,相對 ? ? ? 于圖片左上角的位置,perform()連續(xù)執(zhí)行

? ? ActionChains(browser).move_to_element_with_offset(img, location[0],location[1]).click().perform()

????time.sleep(1)


1-5

成功率還是蠻高的,本篇文章到此結(jié)束,希望看到這篇文章的人有所收獲。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 驗(yàn)證碼的是反爬蟲策略之一,要如何解決驗(yàn)證碼問題? 簡單的驗(yàn)證碼可以通過二值化的辦法 我們以http://my.cn...
    煎煉閱讀 1,100評論 0 0
  • 一. 實(shí)現(xiàn)場景 1. 要想對一個網(wǎng)站內(nèi)容進(jìn)行瀏覽或操作,一般都需要進(jìn)行登錄操作,只有登錄成功后才能進(jìn)行后續(xù)流程,所...
    落地逃閱讀 14,090評論 3 18
  • 我們可以借助插件來做 打開插件,找到自己需要的驗(yàn)證碼 篩選有用的路徑 把對應(yīng)的視圖函數(shù)也拿過來,注意還需要一個ge...
    程序員之路閱讀 1,429評論 0 1
  • 12.2 今天如期到達(dá)山東淄博。首先感受到的是德平、冬青與張銘的熱情和付出。其次是見到TA76同學(xué)、助教以及...
    TA76廣新閱讀 238評論 0 2
  • 有難同當(dāng),有福同享,面對災(zāi)難,面對困難我們和七13班的姜少柯,與校領(lǐng)導(dǎo)一起,努力的過程是值得回憶的 與孩子談理想,...
    感恩遇見丁閱讀 341評論 0 0

友情鏈接更多精彩內(nèi)容