人行征信模擬登陸

有了之前的基礎(chǔ)理論箫爷,就可以付諸實(shí)踐啦
典型案例是央行征信報(bào)告系統(tǒng)的官網(wǎng),年初在登陸頁(yè)面加入了安全控件
并且只可以通過(guò)IE瀏覽器登陸

image.png

其中的密碼輸入框就是安全性更高的控件輸入旱捧,由于我的瀏覽器已經(jīng)安裝過(guò)控件了耘子,所以在密碼輸入未知顯示的是控件框,仔細(xì)對(duì)比登陸名的dom框她我,還是可以看出區(qū)別的

1. 準(zhǔn)備

需要一臺(tái)windwos電腦虹曙,帶IE瀏覽器,進(jìn)入央行征信登陸頁(yè)面:
https://ipcrs.pbccrc.org.cn/
安裝好輸入框控件
python環(huán)境的話番舆,安裝selenium包酝碳,配好iedriver,這里的操作網(wǎng)上教程一大堆恨狈,略過(guò)

2. 登陸分析
image.png

抓包分析疏哗,可以找到登陸入口

輸入登陸名、輸入密碼禾怠、驗(yàn)證碼沃斤,點(diǎn)擊登陸按鈕即可登陸:
這里先異步調(diào)用打碼平臺(tái)打碼
然后selenium輸入登陸名圣蝎,winIO輸入密碼,等待打碼完成輸入驗(yàn)證碼最后提交

3. 實(shí)踐

我們創(chuàng)建一個(gè)模擬登陸類衡瓶,將整套登陸操作封裝一起來(lái)
初始化部分:

def __init__(self):
   self.driver = webdriver.Ie()
   self.coo = {}
   self.captch = ''
   self.event = Event()

driver變量用表示瀏覽器實(shí)例
coo變量:登陸成功的cookie
captch:驗(yàn)證碼

基礎(chǔ)設(shè)施:

驗(yàn)證碼用打碼平臺(tái)的徘公,控件輸入密碼使用之前準(zhǔn)備好的winIO輸入
其中打平臺(tái)的打碼時(shí)間不太穩(wěn)定,我們采用線程異步的方式打碼
from threading import Thread, Event
簡(jiǎn)單介紹下Event,這個(gè)對(duì)象是一個(gè)線程安全的事件信號(hào)哮针,調(diào)用打碼平臺(tái)的時(shí)候先調(diào)用Event.set()方法关面,在其他線程同步完成系列操作之后可以調(diào)用Event.wait(time)方法,等待time時(shí)間十厢,這里給打碼平臺(tái)設(shè)置5s等待時(shí)間等太,超時(shí)打碼未完成則認(rèn)作打碼失敗,更多進(jìn)程線程介紹點(diǎn)這里:http://kaito-kidd.com/2018/05/11/python-advance-process-thread/

    def async_ocr(self):
        t = Thread(target=self.ocr)
        t.setDaemon(True)
        t.start()

    def ocr(self):
        #調(diào)用打碼方法
        rst = TesFunc2(self.img)
        self.captch = rst
        self.event.set()

winIO的包裝:
之前介紹了winIO:http://www.reibang.com/p/40a9de88153f
把輸入密碼的api進(jìn)一步封裝到類中:

    def passwd(self, pwd):
        for i in pwd:
          input_key(i)
          time.sleep(0.1)
主體登陸邏輯

1.請(qǐng)求登陸接口:

    def start(self):
        self.driver.get('https://ipcrs.pbccrc.org.cn/page/login/loginreg.jsp')
        img = 'pictures/{}.png'.format(time.time())
        self.driver.save_screenshot(img)
        element = self.driver.find_element_by_xpath('//img[@class="yzm_img"]')
        left = element.location['x']
        top = element.location['y']
        right = element.location['x'] + element.size['width']
        bottom = element.location['y'] + element.size['height']

        im = Image.open(img)
        im = im.crop((left + 23, top + 1, right, bottom))
        im.save(img)
        self.img = img
        # self.hand = self.driver.current_window_handle
        self.captch = ''

該方法的作用是請(qǐng)求登陸頁(yè)面蛮放,截取驗(yàn)證碼保存為bytes類型缩抡,后面調(diào)用打碼平臺(tái),打碼
截屏用的selenium的diver對(duì)象的方法包颁,摳圖需要用到pillow庫(kù)瞻想,導(dǎo)入:
from PIL import Image
其中的im.crop方法四個(gè)參數(shù)是驗(yàn)證碼的像素點(diǎn),瀏覽器可能略有誤差娩嚼,調(diào)整了一下左側(cè)向右偏移了20多像素

2.輸入登陸信息:

    def form_submit_control(self, username, pwd):
        # 異步打碼
        self.async_ocr()
        time.sleep(0.1)
        self.passwd(pwd)
        name = self.driver.find_element_by_xpath('//input[@id="loginname"]')
        name.send_keys(username)
        img = self.driver.find_element_by_xpath('//input[@id="_@IMGRC@_"]')
        # 等待打碼時(shí)間通知
        try:
            self.event.wait(5)
        except:
            pass
       
        if not self.captch:
            return  '打碼平臺(tái)異常'
        img.send_keys(self.captch)
        submit = self.driver.find_element_by_xpath('//input[@type="submit"]')
        submit.click()
      """"此處處理登陸后續(xù)操作..."""

整體的登陸邏輯就完成了

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末蘑险,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子岳悟,更是在濱河造成了極大的恐慌佃迄,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,036評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件贵少,死亡現(xiàn)場(chǎng)離奇詭異呵俏,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)滔灶,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門普碎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人宽气,你說(shuō)我怎么就攤上這事随常。” “怎么了萄涯?”我有些...
    開封第一講書人閱讀 164,411評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵绪氛,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我涝影,道長(zhǎng)枣察,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,622評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮序目,結(jié)果婚禮上臂痕,老公的妹妹穿的比我還像新娘。我一直安慰自己猿涨,他們只是感情好握童,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,661評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著叛赚,像睡著了一般澡绩。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上俺附,一...
    開封第一講書人閱讀 51,521評(píng)論 1 304
  • 那天肥卡,我揣著相機(jī)與錄音,去河邊找鬼事镣。 笑死步鉴,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的璃哟。 我是一名探鬼主播氛琢,決...
    沈念sama閱讀 40,288評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼沮稚!你這毒婦竟也來(lái)了艺沼?” 一聲冷哼從身側(cè)響起册舞,我...
    開封第一講書人閱讀 39,200評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤蕴掏,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后调鲸,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體盛杰,經(jīng)...
    沈念sama閱讀 45,644評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,837評(píng)論 3 336
  • 正文 我和宋清朗相戀三年藐石,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了即供。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,953評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡于微,死狀恐怖逗嫡,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情株依,我是刑警寧澤驱证,帶...
    沈念sama閱讀 35,673評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站恋腕,受9級(jí)特大地震影響抹锄,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,281評(píng)論 3 329
  • 文/蒙蒙 一伙单、第九天 我趴在偏房一處隱蔽的房頂上張望获高。 院中可真熱鬧,春花似錦吻育、人聲如沸念秧。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)出爹。三九已至,卻和暖如春缎除,著一層夾襖步出監(jiān)牢的瞬間严就,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工器罐, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留梢为,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,119評(píng)論 3 370
  • 正文 我出身青樓轰坊,卻偏偏與公主長(zhǎng)得像铸董,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子肴沫,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,901評(píng)論 2 355

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