【爬蟲】通關(guān)黑板客爬蟲闖關(guān)游戲

最近看到的一個(gè)關(guān)于Python爬蟲的闖關(guān)游戲衅谷,手癢,試他一試矿微。

第一關(guān)

地址:http://www.heibanke.com/lesson/crawler_ex00/
打開網(wǎng)址,首頁是這樣的

Paste_Image.png

按要求修改地址為:http://www.heibanke.com/lesson/crawler_ex00/49163/ ,頁面變化是這樣的

Paste_Image.png

再次修改:http://www.heibanke.com/lesson/crawler_ex00/26470/

Paste_Image.png

看來坝疼,本關(guān)卡的目的是使用爬蟲獲取首頁,然后提取進(jìn)入下一頁的關(guān)鍵數(shù)字谆沃,合成新的頁面钝凶,如此往復(fù)循環(huán),直到找到正確的地址為止唁影。
思路已經(jīng)有了耕陷,靜態(tài)頁面的分析就不說了掂名,看代碼

#-*- coding:utf-8 -*-

import requests
from lxml import etree
import re
import sys
reload(sys)
sys.setdefaultencoding('utf-8')

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36"
}

#獲取頁面
def getHtml(page):
    url = 'http://www.heibanke.com/lesson/crawler_ex00/'+page
    res = requests.get(url,headers=headers,timeout=30).text
    #因?yàn)殚_始的時(shí)候不知道成功后的下一個(gè)頁面地址在哪里,所以將每個(gè)頁面的源代碼都保存了下來哟沫,方便查看
    # with open('game.html','w') as f:
    #   f.write(res)
    return res

#如果需要繼續(xù)輸入數(shù)字饺蔑,則正則匹配可以成功,
#如果不需要繼續(xù)輸入數(shù)字了嗜诀,那么正則匹配之后會(huì)報(bào)錯(cuò)猾警,所以報(bào)錯(cuò)的時(shí)候就是成功的時(shí)候
def main():
    page = ''
    print '開始第一關(guān)..'
    while True:
        try:
            html = getHtml(page)
            tree = etree.HTML(html)
            h3 = tree.xpath('/html/body/div/div/div[2]/h3/text()')[0]
            print h3
            if u'恭喜' in h3:
                n_url = tree.xpath('/html/body/div/div/div[2]/a/@href')[0]
                next_url = 'http://www.heibanke.com'+n_url
                print '下一關(guān)的地址為:%s'%next_url
            page = re.findall('\d+',h3)[0] 
        except Exception,e:
            print e
            break

if __name__ == '__main__':
    main()

運(yùn)行結(jié)果

...........
恭喜你,你找到了答案.繼續(xù)你的爬蟲之旅吧
下一關(guān)的地址為:http://www.heibanke.com/lesson/crawler_ex01/
list index out of range
[Finished in 129.4s]

第二關(guān)

地址:http://www.heibanke.com/lesson/crawler_ex01/
這個(gè)地址有一點(diǎn)挺奇怪,偶爾出現(xiàn)一個(gè)現(xiàn)象:如果你是在闖關(guān)游戲的頁面地址欄輸入該地址隆敢,則可以鏈接到肿嘲,但是如果你直接從其他頁面鏈接過去,則無法打開筑公,應(yīng)該是做了Referer檢測(cè)吧雳窟,但為什么是偶爾呢?想不通(逃...)

第二關(guān)的頁面是這樣的

Paste_Image.png

看來是要猜測(cè)30次數(shù)字了匣屡,但是數(shù)字是如何提交上去的呢?
隨便輸入一個(gè)值封救,直接成功的概率太小,主要是讓它報(bào)錯(cuò)捣作,然后來看請(qǐng)求
發(fā)現(xiàn)了這個(gè)

Paste_Image.png

源碼中也可以看到csrf驗(yàn)證的值

Paste_Image.png

所以該請(qǐng)求是使用post方式傳入三個(gè)字段的信息誉结,驗(yàn)證失敗則修改password再次驗(yàn)證,直到成功為止券躁,故源碼如下

#-*- coding:utf-8 -*-

import requests
from lxml import etree
import re
import sys
reload(sys)
sys.setdefaultencoding('utf-8')

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36"
}

def getcsrf():
    url = 'http://www.heibanke.com/lesson/crawler_ex01/'
    res = requests.get(url,headers=headers,timeout=30).text
    tree = etree.HTML(res)
    csrf = tree.xpath('/html/body/div/div/div[2]/form/input/@value')[0]
    #csrf = re.findall('name="csrfmiddlewaretoken" value="(.*?)"',res)
    print csrf
    return csrf

#猜測(cè)密碼
def guess(csrf,num):
    url = 'http://www.heibanke.com/lesson/crawler_ex01/'
    data = {
        "csrfmiddlewaretoken":csrf,
        "username":"whaike",
        "password":str(num)
    }
    print data
    res = requests.post(url,headers=headers,data=data,timeout=30).text
    h3 = re.findall('<h3>(.*?)</h3>',res)[0]
    if not u'密碼錯(cuò)誤' in h3:
        print h3
        tree = etree.HTML(res)
        n_url = tree.xpath('/html/body/div/div/div[2]/a/@href')[0]
        next_url = 'http://www.heibanke.com'+n_url
        print '下一關(guān)的地址為:%s'%next_url
        return True
    else:
        return False

def main():
    page = ''
    print '開始第二關(guān)..'
    csrf = getcsrf()
    for n in range(31):
        if guess(csrf,n):
            break

if __name__ == '__main__':
    main()

順利拿到下一關(guān)地址惩坑!

第三關(guān)

地址:http://www.heibanke.com/lesson/crawler_ex02/
第三關(guān)首先需要輸入用戶名和密碼,輸入之后發(fā)現(xiàn)提示用戶不存在也拜,原來需要注冊(cè)以舒,在這里我用自己的賬號(hào)注冊(cè)了一個(gè),登陸之后慢哈,就可以繼續(xù)愉快的玩耍了

Paste_Image.png

看樣子第三關(guān)首先需要模擬登陸
在這里我使用requests的session對(duì)象來保持會(huì)話蔓钟。
分析網(wǎng)頁源碼,發(fā)現(xiàn)參數(shù)的提交使用的是一個(gè)form標(biāo)簽卵贱,其action參數(shù)為空滥沫,表示提交數(shù)據(jù)由本頁負(fù)責(zé),所以post會(huì)將參數(shù)提交到本頁的地址键俱。
因?yàn)榈顷懼箜撁鏁?huì)重定向到其他頁兰绣,所以使用瀏覽器自帶的抓包工具去抓取請(qǐng)求參數(shù)并不友好,這里我使用fiddler進(jìn)行抓包编振,在請(qǐng)求頭中看到這樣的字段

Paste_Image.png

所以模擬登陸的時(shí)候post傳參有三個(gè)字段缀辩,思路已經(jīng)清晰:
模擬登陸,使用session會(huì)話保持登陸狀態(tài)并獲取第三關(guān)的地址頁源碼,取得csrf,然后遞增30以內(nèi)的數(shù)字作為密碼傳遞給服務(wù)器雌澄,當(dāng)請(qǐng)求到的頁面中不包含“<em>您輸入的密碼錯(cuò)誤, 請(qǐng)重新輸入</em>”這樣的文字的時(shí)候,就是成功的時(shí)候了杯瞻。
源碼如下

#-*- coding:utf-8 -*-

import requests
from lxml import etree
import re
import sys
reload(sys)
sys.setdefaultencoding('utf-8')

se = requests.session()
headers = {
    "User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36"
}

class HBK():
    def __init__(self):
        self.login_url = "http://www.heibanke.com/accounts/login"
        self.username = "whaike"
        self.password = "12345654321"

    def getCsrf(self):
        res = se.get(url=self.login_url,headers=headers,timeout=30).text
        tree = etree.HTML(res)
        self.csrf = tree.xpath('/html/body/div/div/div[2]/form/input[@name="csrfmiddlewaretoken"]/@value')[0]

    def login(self):
        self.getCsrf()
        data = {
            "csrfmiddlewaretoken":self.csrf,
            "username":self.username,
            "password":self.password
        }
        se.post(url=self.login_url,headers=headers,data=data,timeout=30)
        print u'登陸成功'

print '開始闖關(guān) - 第三關(guān)'
spider = HBK()
spider.login()

url = 'http://www.heibanke.com/lesson/crawler_ex02/'
res = se.get(url,headers=headers,timeout=30).text
tree = etree.HTML(res)
#獲取csrf
csrf = tree.xpath('/html/body/div/div/div[2]/form/input[@name="csrfmiddlewaretoken"]/@value')[0]

#猜測(cè)密碼
def guess(num=1):
    print 'guess',num
    data = {
        "csrfmiddlewaretoken":csrf,
        "username":"whaike",
        "password":str(num)
    }
    res = se.post(url,headers=headers,data=data,timeout=30).text
    tree = etree.HTML(res)
    h3 = tree.xpath('/html/body/div/div/div[2]/h3/text()')[0]
    if not u'錯(cuò)誤' in h3:
        print '猜測(cè)到正確的密碼為%d'%num
        return num #如果沒有發(fā)現(xiàn)錯(cuò)誤兩個(gè)字镐牺,則結(jié)束遞歸
    else:
        guess(num+1)

guess()
print 'success'

闖關(guān)成功之后發(fā)現(xiàn)下一關(guān)的地址還是原來的那個(gè),崩潰

Paste_Image.png

不過觀察第二關(guān)和第三關(guān)的地址發(fā)現(xiàn)就最后一個(gè)路徑不一樣魁莉,有遞增的趨勢(shì)睬涧,猜測(cè)第四關(guān)的地址為:http://www.heibanke.com/lesson/crawler_ex03/ ,果然如此
順利進(jìn)入第四關(guān)

Paste_Image.png

第四關(guān)

地址:http://www.heibanke.com/lesson/crawler_ex03/
第四關(guān)又是猜密碼旗唁,還不知道是什么鬼畦浓,所以隨便輸一個(gè)看看有沒有提示,果然

Paste_Image.png

去看看提示

Paste_Image.png

原來密碼被拆分掉检疫,分開顯示在這里讶请,位置和值一一對(duì)應(yīng)。
首先想到將13頁全部抓下來屎媳,然后按位置去一一對(duì)應(yīng)夺溢,可惜這樣失敗了,13頁的所有數(shù)據(jù)抓了幾次烛谊,抓下來去重后組成的密碼長(zhǎng)度有70多位也有80多位的风响,去登陸也都失敗了。沒辦法丹禀,在網(wǎng)上看到有人說密碼位數(shù)是100位状勤,我去,誰能想到双泪,哪里來那么多數(shù)據(jù)持搜。后來看到一個(gè)方法,既然每頁的數(shù)據(jù)是隨機(jī)的焙矛,那么只抓取第一頁的數(shù)據(jù)朵诫,每抓取一次添加到固定長(zhǎng)度的密碼位,方法可行薄扁。

所以思路是:
模擬登陸剪返,初始化一個(gè)長(zhǎng)度為100的數(shù)組用來存放密碼,獲取第一頁的全部位置和值邓梅,將它們的值更新到數(shù)組的正確位置脱盲,合并數(shù)組中的值組成一個(gè)字符串,判斷字符串長(zhǎng)度日缨,如果小于100則繼續(xù)抓取第一頁的數(shù)據(jù)并跟新到數(shù)組钱反,直到數(shù)組長(zhǎng)度滿足100,將數(shù)組中的值轉(zhuǎn)換為字符串通過post提交到服務(wù)器進(jìn)行判斷,如果不成功則繼續(xù)更新數(shù)組中的值面哥,如果成功則打印消息并退出哎壳。
具體代碼如下

#-*- coding:utf-8 -*-
#單線程版
import requests
from lxml import etree
import codecs
import csv
import re
import sys
reload(sys)
sys.setdefaultencoding('utf-8')

se = requests.session()


headers = {
    "User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36"
}

class HBK():
    def __init__(self):
        self.login_url = "http://www.heibanke.com/accounts/login"
        self.username = "whaike"
        self.password = "12345654321"
        self.passwrods = ['' for i in range(101)]
        self.pwd = ''

        ##獲取登陸之前的csrf
    def getCsrf(self):
        res = se.get(url=self.login_url,headers=headers,timeout=30).text
        tree = etree.HTML(res)
        self.csrf = tree.xpath('/html/body/div/div/div[2]/form/input[@name="csrfmiddlewaretoken"]/@value')[0]

    #登陸
    def login(self):
        self.getCsrf()
        data = {
            "csrfmiddlewaretoken":self.csrf,
            "username":self.username,
            "password":self.password
        }
        se.post(url=self.login_url,headers=headers,data=data,timeout=30)
        print u'登陸成功'

    #獲取登陸之后的csrf,也就是要進(jìn)行第四關(guān)闖關(guān)的csrf
    def getNCsrf(self):
        url = 'http://www.heibanke.com/lesson/crawler_ex03/'
        res = se.get(url,headers=headers,timeout=30).text
        tree = etree.HTML(res)
        csrf = tree.xpath('//input[1]/@value')[0]
        return csrf

    #猜測(cè)密碼是否正確
    def guesspwd(self):
        url = 'http://www.heibanke.com/lesson/crawler_ex03/'
        csrf = self.getNCsrf()
        data = {
            "csrfmiddlewaretoken":csrf,
            "username":"whaike",
            "password":self.pwd
        }
        res = se.post(url,headers=headers,data=data,timeout=30)
        if int(res.status_code) == 200:
            self.h3 = re.findall('<h3>(.*?)</h3>',res.text)
            return True
        else:
            return False

    #循環(huán)抓取第一頁的隨機(jī)值,直到密碼長(zhǎng)度為100時(shí)開始猜測(cè)尚卫,猜測(cè)失敗繼續(xù)執(zhí)行归榕,猜測(cè)成功停止運(yùn)行
    def getGasswords(self):
        print '獲取第一頁'
        url = 'http://www.heibanke.com/lesson/crawler_ex03/pw_list/?page=1'
        res = se.get(url,headers=headers,timeout=30).text
        tree = etree.HTML(res)
        trs = tree.xpath('/html/body/div/div/div[2]/table/tr')[1:]
        for tr in trs:
            p1 = tr.xpath('td[1]/text()')[0] #位置
            p = int(re.findall('\d+',p1)[0]) #偶爾數(shù)字前會(huì)有一些其他字符出現(xiàn),提取數(shù)字部分,轉(zhuǎn)換為整數(shù)
            w = tr.xpath('td[2]/text()')[0] #值
            self.passwrods[p] = w
        self.pwd = ''.join(self.passwrods)
        length = len(self.pwd) #密碼長(zhǎng)度
        print '當(dāng)前密碼:%s,長(zhǎng)度%d'%(self.pwd,length)
        if length == 100:
            print '滿足條件,開始猜測(cè)...'
            if self.guesspwd():
                print '猜測(cè)成功,密碼為:%s'%self.pwd
            else:
                print '猜測(cè)失敗,繼續(xù)執(zhí)行'
                self.getGasswords()
        else: #如果密碼長(zhǎng)度不為100吱涉,則再次獲取第一頁的隨機(jī)密碼并組成新的密碼
            self.getGasswords() #遞歸


print '開始闖關(guān) - 第四關(guān)'
spider = HBK()
spider.login()
spider.getGasswords()
print spider.h3

這里還有個(gè)坑刹泄,網(wǎng)頁的反應(yīng)很慢,每次請(qǐng)求都需要很長(zhǎng)時(shí)間才能得到數(shù)據(jù)怎爵,所以理想的情況是使用多線程去做特石,但是我這里使用的是單線程。所以時(shí)間會(huì)比較長(zhǎng)鳖链。

運(yùn)行記錄

.............
當(dāng)前密碼:4895069524432954894613647990394874326048437134877661813696344916326470648993670283105253381901613579,長(zhǎng)度100
滿足條件姆蘸,開始猜測(cè)...
猜測(cè)成功,密碼為:4895069524432954894613647990394874326048437134877661813696344916326470648993670283105253381901613579
[u'\u606d\u559c! \u7528\u6237whaike\u6210\u529f\u95ef\u5173, \u7ee7\u7eed\u4f60\u7684\u722c\u866b\u4e4b\u65c5\u5427']
[Finished in 795.7s]

最后一個(gè)打印h3的時(shí)候忘記添加索引了,導(dǎo)致打印了一個(gè)數(shù)組(尷尬臉...)芙委,懶得改了
第五關(guān)地址依然靠猜吧

第五關(guān)

地址:http://www.heibanke.com/lesson/crawler_ex04/
進(jìn)入第五關(guān)乞旦,看到了這樣的界面

Paste_Image.png

通過前幾關(guān)的經(jīng)驗(yàn),可以分析出這次的請(qǐng)求依然是猜密碼题山,只不過增加了驗(yàn)證碼識(shí)別兰粉。
請(qǐng)求的字段為5個(gè):一個(gè)是csrf驗(yàn)證,一個(gè)在驗(yàn)證碼的img標(biāo)簽之后與csrf以相同的方式隱藏value,其實(shí)也是驗(yàn)證碼src的最后一個(gè)路徑顶瞳,還有一個(gè)是驗(yàn)證碼識(shí)別出來的字符玖姑,另外兩個(gè)是用戶名和密碼。

Paste_Image.png

在這里慨菱,我使用開源的OCR庫Tesseract(地址:https://github.com/tesseract-ocr/tesseract/wiki) 來進(jìn)行驗(yàn)證碼識(shí)別焰络。
在windows上使用只需百度搜索下載并安裝tesseract-ocr-setup-3.02.02.exe文件即可,注意符喝,目前良好支持windows的版本只有3.02闪彼。
安裝完成之后,可以在命令行鍵入tesseract myscan.png out -l eng來識(shí)別當(dāng)前目錄下的myscan.png文件并將結(jié)果輸出到out.txt中协饲。
在Python中本來使用os模塊可以執(zhí)行命令行畏腕,但是這樣的命令行過于簡(jiǎn)單,無法完成復(fù)雜的輸入和輸出茉稠,我們可以使用subprocess.Popen來解決這個(gè)問題描馅。

所以思路是這樣的:
模擬登錄,獲取csrf和驗(yàn)證碼隱藏的value以及下載驗(yàn)證碼圖片到本地而线,識(shí)別驗(yàn)證碼铭污,識(shí)別成功則從密碼0開始遞增猜測(cè)恋日,每一次猜測(cè)都要獲取新的驗(yàn)證碼,如果識(shí)別驗(yàn)證碼失敗則重新獲取驗(yàn)證碼直到識(shí)別成功才繼續(xù)猜測(cè)嘹狞,如果猜測(cè)密碼時(shí)提示輸入的驗(yàn)證碼不正確岂膳,則重新獲取驗(yàn)證碼并且重新猜測(cè)該值,直到成功為止磅网。

相關(guān)代碼如下

#-*- coding:utf-8 -*-

import requests
from lxml import etree
import datetime,time
import re
import os
import subprocess
import sys
reload(sys)
sys.setdefaultencoding('utf-8')

se = requests.session()

headers = {
    "User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36"
}

#log日志
def loggs(strs):
    with open('logs.log','ab') as f:
        time = str(datetime.datetime.now())[:-7]
        t = os.linesep
        s = time+' : '+strs
        print s
        f.write(s+t)

class HBK():
    def __init__(self):
        self.login_url = "http://www.heibanke.com/accounts/login"
        self.chapter_url = 'http://www.heibanke.com/lesson/crawler_ex04/'
        self.username = "whaike"
        self.password = "12345654321"

    #獲取登陸之前的csrf
    def getCsrf(self):
        res = se.get(url=self.login_url,headers=headers,timeout=30).text
        tree = etree.HTML(res)
        self.csrf = tree.xpath('/html/body/div/div/div[2]/form/input[@name="csrfmiddlewaretoken"]/@value')[0]

    #登陸
    def login(self):
        self.getCsrf()
        data = {
            "csrfmiddlewaretoken":self.csrf,
            "username":self.username,
            "password":self.password
        }
        se.post(url=self.login_url,headers=headers,data=data,timeout=30)
        loggs('登陸成功')

    #識(shí)別驗(yàn)證碼,識(shí)別當(dāng)前目錄下的capt.png圖片
    def get_captcha(self):
        p = subprocess.Popen(['tesseract','capt.png','captcha'])
        p.wait()
        with open('captcha.txt','r') as f:
            data = f.read()
        s= data.strip()
        return s

    #保存圖片
    def saveImg(self,url):
        res = se.get(url,headers=headers,timeout=30)
        if res.status_code == 200:
            with open('capt.png','wb') as f:
                f.write(res.content)

    #獲取第五關(guān)的頁面谈截,得到csrf和驗(yàn)證碼圖片
    def getinfos(self):
        res = se.get(url=self.chapter_url,headers=headers,timeout=30).text
        tree = etree.HTML(res)
        self.f_csrf = tree.xpath('/html/body/div/div/div[2]/form/input[@name="csrfmiddlewaretoken"]/@value')[0]
        img_src = tree.xpath('/html/body/div/div/div[2]/form/div[3]/img/@src')[0]
        img_url = 'http://www.heibanke.com'+img_src
        self.saveImg(img_url)
        self.img_name = tree.xpath('//*[@id="id_captcha_0"]/@value')[0]
        try:
            yzm = self.get_captcha()
        except Exception,e:
            yzm = ''
            loggs('驗(yàn)證碼識(shí)別失敗')
        if re.match('^[A-Z|0-9]{3,6}$',yzm,re.I):
            loggs('識(shí)別出驗(yàn)證碼:%s'%yzm)
            self.yzm = yzm
        else:
            loggs('驗(yàn)證碼識(shí)別錯(cuò)誤%s,重新獲取'%yzm)
            self.getinfos()
        #return (self.f_csrf,img_url,self.yzm)

    #猜數(shù)字
    def guessNum(self,num=0):
        self.getinfos()
        loggs('guess number %d'%num)
        data = {
            "csrfmiddlewaretoken":self.f_csrf,
            "username":self.username,
            "password":str(num),
            "captcha_0":self.img_name,
            "captcha_1":self.yzm
        }
        loggs(str(data))
        res = se.post(url=self.chapter_url,headers=headers,data=data,timeout=30)
        if res.status_code == 200:
            h3 = re.findall('<h3>(.*?)</h3>',res.text)
            h3 = h3[0]
            loggs(h3)
            if u'恭喜' in h3: #如果成功則打印h3,如果失敗則繼續(xù)猜測(cè)
                loggs('驗(yàn)證成功!')
                loggs(h3)
            elif u'驗(yàn)證碼輸入錯(cuò)誤' in h3:
                loggs('再次請(qǐng)求%s'%res.status_code)
                self.guessNum(num)
            else:
                loggs('驗(yàn)證失敗知市,繼續(xù)猜測(cè)')
                self.guessNum(num+1)
        else:
            loggs('請(qǐng)求失敗%s,再次請(qǐng)求'%res.status_code)
            self.guessNum(num)

loggs('開始闖關(guān) - 第五關(guān)')
spider = HBK()
spider.login()
spider.guessNum()

注意:存放py文件的路徑不能有中文。
運(yùn)行結(jié)果如下

.........
Tesseract Open Source OCR Engine v3.02 with Leptonica
2017-06-07 15:30:36 : 識(shí)別出驗(yàn)證碼:MPPO
2017-06-07 15:30:36 : guess number 20
2017-06-07 15:30:36 : {'username': 'whaike', 'csrfmiddlewaretoken': 'maXozqF1efyoirhMz41RzhmWCUVc8tYq', 'password': '20', 'captcha_0': 'cd7254fedd008d5e434980de86447c2187e240ac', 'captcha_1': 'MPPO'}
2017-06-07 15:30:37 : 恭喜! 用戶whaike成功闖關(guān), 后續(xù)關(guān)卡敬請(qǐng)期待
2017-06-07 15:30:37 : 驗(yàn)證成功!
2017-06-07 15:30:37 : 恭喜! 用戶whaike成功闖關(guān), 后續(xù)關(guān)卡敬請(qǐng)期待
[Finished in 372.4s]

這里不同的時(shí)間其密碼也可能不同速蕊,比如我第二次識(shí)別的時(shí)候答案為1那么很快就成功了嫂丙。

...........
Tesseract Open Source OCR Engine v3.02 with Leptonica
2017-06-07 23:00:22 : 識(shí)別出驗(yàn)證碼:ARCN
2017-06-07 23:00:22 : guess number 1
2017-06-07 23:00:22 : {'username': 'whaike', 'csrfmiddlewaretoken': 'K4eUEZpJ5siJ26f2B9zFue0WsVDZKwna', 'password': '1', 'captcha_0': 'cae8539c36fdcd39f3eab44469e9c066670a1539', 'captcha_1': 'ARCN'}
2017-06-07 23:00:23 : 恭喜! 用戶whaike成功闖關(guān), 后續(xù)關(guān)卡敬請(qǐng)期待
2017-06-07 23:00:23 : 驗(yàn)證成功!
2017-06-07 23:00:23 : 恭喜! 用戶whaike成功闖關(guān), 后續(xù)關(guān)卡敬請(qǐng)期待
[Finished in 19.5s]

<b>關(guān)鍵在過程!</b>

Paste_Image.png

在這里规哲,感謝黑板客提供的好玩兒的爬蟲游戲跟啤。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市唉锌,隨后出現(xiàn)的幾起案子隅肥,更是在濱河造成了極大的恐慌,老刑警劉巖袄简,帶你破解...
    沈念sama閱讀 218,284評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件腥放,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡绿语,警方通過查閱死者的電腦和手機(jī)秃症,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來吕粹,“玉大人种柑,你說我怎么就攤上這事∑ジ” “怎么了聚请?”我有些...
    開封第一講書人閱讀 164,614評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)稳其。 經(jīng)常有香客問我驶赏,道長(zhǎng),這世上最難降的妖魔是什么既鞠? 我笑而不...
    開封第一講書人閱讀 58,671評(píng)論 1 293
  • 正文 為了忘掉前任母市,我火速辦了婚禮,結(jié)果婚禮上损趋,老公的妹妹穿的比我還像新娘患久。我一直安慰自己椅寺,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,699評(píng)論 6 392
  • 文/花漫 我一把揭開白布蒋失。 她就那樣靜靜地躺著返帕,像睡著了一般。 火紅的嫁衣襯著肌膚如雪篙挽。 梳的紋絲不亂的頭發(fā)上荆萤,一...
    開封第一講書人閱讀 51,562評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音铣卡,去河邊找鬼链韭。 笑死,一個(gè)胖子當(dāng)著我的面吹牛煮落,可吹牛的內(nèi)容都是我干的敞峭。 我是一名探鬼主播,決...
    沈念sama閱讀 40,309評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼蝉仇,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼旋讹!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起轿衔,我...
    開封第一講書人閱讀 39,223評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤沉迹,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后害驹,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體鞭呕,經(jīng)...
    沈念sama閱讀 45,668評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,859評(píng)論 3 336
  • 正文 我和宋清朗相戀三年宛官,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了琅拌。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,981評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡摘刑,死狀恐怖进宝,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情枷恕,我是刑警寧澤党晋,帶...
    沈念sama閱讀 35,705評(píng)論 5 347
  • 正文 年R本政府宣布,位于F島的核電站徐块,受9級(jí)特大地震影響未玻,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜胡控,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,310評(píng)論 3 330
  • 文/蒙蒙 一扳剿、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧昼激,春花似錦庇绽、人聲如沸锡搜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽耕餐。三九已至,卻和暖如春辟狈,著一層夾襖步出監(jiān)牢的瞬間肠缔,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工哼转, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留明未,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,146評(píng)論 3 370
  • 正文 我出身青樓壹蔓,卻偏偏與公主長(zhǎng)得像趟妥,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子庶溶,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,933評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容