POST請(qǐng)求登錄網(wǎng)頁(yè)

一、登錄知乎
這里用的是手機(jī)端登錄的,知乎登錄的鏈接

知乎登錄
post請(qǐng)求

post請(qǐng)求的參數(shù):
_xsrf:據(jù)說是防跨站請(qǐng)求的拂玻;
password:密碼
email:登錄郵箱
captcha:驗(yàn)證碼

在登錄頁(yè)定位到這些參數(shù)捏检,用post在登錄時(shí)傳入這些參數(shù),就可以登錄了壮吩;
下面是完整代碼:

import requests, time
from http import cookiejar
from PIL import Image
import re

session = requests.session()
session.cookies = cookiejar.LWPCookieJar(filename='cookies.txt')
headers = {
    'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Mobile Safari/537.36'
}
try:
    # 從本地文件加載cookies
    # ignore_discard的意思是即使cookies將被丟棄也將它保存下來进苍,ignore_expires的意思是如果在該文件中cookies已經(jīng)存在,則覆蓋原文件寫入
    session.cookies.load(ignore_discard=True)
except Exception as e:
    print('exception:', e)
    print('沒有cookie信息')

def get_xsrf():
    index_url = 'https://www.zhihu.com/signin?next=/'
    # _xsrf 是一個(gè)動(dòng)態(tài)變化的必要參數(shù)
    index_page = session.get(index_url, headers=headers)
    html = index_page.text
    pattern = r'name="_xsrf" value="(.*?)"'
    # 這里的_xsrf 返回的是一個(gè)list
    _xsrf = re.findall(pattern, html)
    return _xsrf[0]

def get_captcha():
    t = str(int(time.time() * 1000))
    captcha_url = 'https://www.zhihu.com/captcha.gif?r=' + t + "&type=login"
    response = session.get(captcha_url, headers=headers)
    captcha_name = 'captcha.gif'
    with open(captcha_name, 'wb') as f:
        f.write(response.content)
    im = Image.open(captcha_name)
    im.show()
    return input('請(qǐng)輸入驗(yàn)證碼: ')

def get_email():
    return input('請(qǐng)輸入郵箱: ')

def get_password():
    return input('請(qǐng)輸入密碼: ')


def login(email, password, _xsrf, captcha):
    data = {
        '_xsrf': _xsrf,
        'password': password,
        'email': email,
        'captcha': captcha
    }
    login_url = 'https://www.zhihu.com/login/email'
    response = session.post(login_url, data=data, headers=headers)
    print('response.json() =', response.json())
    # 保存cookies到本地
    session.cookies.save()

def isLogin():
    # 查看用戶個(gè)人信息來判斷是否已經(jīng)登錄
    url = "https://www.zhihu.com/settings/profile"
    # 這里重定向一定要設(shè)置為false, 否則就算沒有登錄會(huì)被重定向到登錄的地址去, 然后code就返回200了
    response = session.get(url, headers=headers, allow_redirects=False)
    code = response.status_code
    if code == 200:
        return True
    else:
        return False


if __name__ == '__main__':
    if isLogin():
        print('您已經(jīng)登錄')
    else:
        email = get_email()
        password = get_password()
        _xsrf = get_xsrf()
        print('_xsrf =', _xsrf)
        captcha = get_captcha()
        login(email, password, _xsrf, captcha)

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

登錄成功

這里是用郵箱登錄的鸭叙,驗(yàn)證碼需要手動(dòng)輸入觉啊;

二、自動(dòng)識(shí)別驗(yàn)證碼
python識(shí)別驗(yàn)證碼沈贝,需要安裝的模塊

Ubuntu版本:
1杠人、tesseract-ocr安裝
sudo apt-get install tesseract-ocr
2、pytesseract安裝
sudo pip install pytesseract
3宋下、Pillow 安裝
sudo pip install pillow

其他linux版本(如centos):
1嗡善、tesseract-ocr安裝 沒找到直接命令安裝,所以需要手動(dòng)下載安裝包学歧。 https://github.com/tesseract-ocr/tesseract 在上述地址中下載最新的tesseract-ocr的安裝包罩引,并解壓。 通過以下命令安裝:
(1)cd tesseract-3.04.01
(2)./autogen.sh
(3)./configure 注意撩满,如果出現(xiàn)error: leptonica not found蜒程,需要下載安裝leptonica http://www.leptonica.org/download.html
(4)make
(5)make install
(6)ldconfig
2绅你、pytesseract安裝 sudo pip install pytesseract
3、Pillow 安裝 sudo pip install pillow

windows版本:
1昭躺、tesseract-ocr安裝 下載忌锯,并安裝。
注意:如果是64位的用戶领炫,在安裝的時(shí)需要改變安裝目錄偶垮,如下圖所示

安裝路徑

2、pytesseract安裝 pip install pytesseract
3帝洪、Pillow 安裝 pip install pillow

下面驗(yàn)證一下識(shí)別驗(yàn)證碼:

#coding:utf-8
import pytesseract
from PIL import Image
image = Image.open('code.png')
code = pytesseract.image_to_string(image)
print(code)

可能會(huì)遇到的問題:
問題1似舵、FileNotFoundError: [WinError 2] 系統(tǒng)找不到指定的文件。

Paste_Image.png

解決辦法:
1葱峡、[推薦]: 將tesseract.exe添加到環(huán)境變量PATH中砚哗,
例如: 默認(rèn)路徑為C:\Program Files (x86)\Tesseract-OCR
注意: 為了使環(huán)境變量生效,需要關(guān)閉cmd窗口或是關(guān)閉pycharm等ide重新啟動(dòng)
2砰奕、 修改pytesseract.py文件蛛芥,指定tesseract.exe安裝路徑
打開文件 pytesseract.py,找到如下代碼军援,將tesseract_cmd的值修改為全路徑仅淑,在此使用就不會(huì)報(bào)錯(cuò)了。

# CHANGE THIS IF TESSERACT IS NOT IN YOUR PATH, OR IS NAMED DIFFERENTLY
# tesseract_cmd = 'tesseract'
tesseract_cmd = 'C:/Program Files (x86)/Tesseract-OCR/tesseract.exe'

3胸哥、 在實(shí)際運(yùn)行代碼中指定

pytesseract.pytesseract.tesseract_cmd = 'D:\\Tesseract-OCR\\tesseract.exe'

問題2:
pytesseract.pytesseract.TesseractError: (1, 'Error opening data file \Tesseract-OCR\tessdata/eng.traineddata')

解決方法:
1涯竟、[推薦]:將tessdata目錄的上級(jí)目錄所在路徑(默認(rèn)為tesseract-ocr安裝目錄)添加至TESSDATA_PREFIX環(huán)境變量中
例如: C:\Program Files (x86)\Tesseract-OCR
2、 在.py文件配置中指定tessdata-dir

tessdata_dir_config = '--tessdata-dir "D:\\Tesseract-OCR\\tessdata"'
# tessdata_dir_config = '--tessdata-dir "'C:\\Program Files (x86)\\Tesseract-OCR\\tessdata"'
pytesseract.image_to_string(image, config=tessdata_dir_config)

小試牛刀:

#coding:utf-8
import pytesseract
from PIL import Image
image = Image.open('code.png')
code = pytesseract.image_to_string(image)
print(code)

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

結(jié)果
驗(yàn)證碼

參考文檔

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末空厌,一起剝皮案震驚了整個(gè)濱河市庐船,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蝇庭,老刑警劉巖醉鳖,帶你破解...
    沈念sama閱讀 216,744評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異哮内,居然都是意外死亡盗棵,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,505評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門北发,熙熙樓的掌柜王于貴愁眉苦臉地迎上來纹因,“玉大人,你說我怎么就攤上這事琳拨〔t恰!?“怎么了?”我有些...
    開封第一講書人閱讀 163,105評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵狱庇,是天一觀的道長(zhǎng)惊畏。 經(jīng)常有香客問我恶耽,道長(zhǎng),這世上最難降的妖魔是什么颜启? 我笑而不...
    開封第一講書人閱讀 58,242評(píng)論 1 292
  • 正文 為了忘掉前任偷俭,我火速辦了婚禮,結(jié)果婚禮上缰盏,老公的妹妹穿的比我還像新娘涌萤。我一直安慰自己,他們只是感情好口猜,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,269評(píng)論 6 389
  • 文/花漫 我一把揭開白布负溪。 她就那樣靜靜地躺著,像睡著了一般济炎。 火紅的嫁衣襯著肌膚如雪川抡。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,215評(píng)論 1 299
  • 那天须尚,我揣著相機(jī)與錄音猖腕,去河邊找鬼。 笑死恨闪,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的放坏。 我是一名探鬼主播咙咽,決...
    沈念sama閱讀 40,096評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼淤年!你這毒婦竟也來了钧敞?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,939評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤麸粮,失蹤者是張志新(化名)和其女友劉穎溉苛,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體弄诲,經(jīng)...
    沈念sama閱讀 45,354評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡愚战,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,573評(píng)論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了齐遵。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片寂玲。...
    茶點(diǎn)故事閱讀 39,745評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖梗摇,靈堂內(nèi)的尸體忽然破棺而出拓哟,到底是詐尸還是另有隱情,我是刑警寧澤伶授,帶...
    沈念sama閱讀 35,448評(píng)論 5 344
  • 正文 年R本政府宣布断序,位于F島的核電站流纹,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏违诗。R本人自食惡果不足惜漱凝,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,048評(píng)論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望较雕。 院中可真熱鬧碉哑,春花似錦、人聲如沸亮蒋。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,683評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)慎玖。三九已至贮尖,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間趁怔,已是汗流浹背湿硝。 一陣腳步聲響...
    開封第一講書人閱讀 32,838評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留润努,地道東北人关斜。 一個(gè)月前我還...
    沈念sama閱讀 47,776評(píng)論 2 369
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像铺浇,于是被迫代替她去往敵國(guó)和親痢畜。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,652評(píng)論 2 354

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

  • 我自己的理解 有可能繞過認(rèn)證碼盡量選擇繞過去鳍侣,請(qǐng)多嘗試丁稀,繞過去爬取效率高不少; 先不考慮那些一天一套認(rèn)證碼的網(wǎng)站倚聚,...
    __混沌閱讀 3,119評(píng)論 1 1
  • # Python 資源大全中文版 我想很多程序員應(yīng)該記得 GitHub 上有一個(gè) Awesome - XXX 系列...
    aimaile閱讀 26,480評(píng)論 6 427
  • 經(jīng)過對(duì)django的初步學(xué)習(xí)线衫,我們已經(jīng)對(duì)后臺(tái)的基本流程以及django的運(yùn)作有了一定的了解,但是這還不足夠惑折,dja...
    coder_ben閱讀 3,830評(píng)論 8 34
  • 前言 相信大家利用 Python 寫的爬蟲應(yīng)該遇到過要輸入驗(yàn)證碼的尷尬局面授账,又或者寫了個(gè)自動(dòng)填充表單的小程序,結(jié)果...
    迦度藍(lán)洛閱讀 16,583評(píng)論 2 35
  • 仍要感恩唬复,感謝上帝矗积!(?*) 這一周,實(shí)在是早上睜不開眼中午起不來床的日子…做夢(mèng)與現(xiàn)...
    4eb414fc6a66閱讀 198評(píng)論 0 0