Python模擬登陸方法總結(jié)(一)

(之前一直不知道簡述可以用Markdown,所以用這個格式弄了一下释漆,代碼更易讀一點悲没,內(nèi)容基本沒變。灵汪。檀训。)
玩了那么久,是時候總結(jié)一波享言。善于總結(jié)是良好的學習方法峻凫。

模擬登錄方法不少,網(wǎng)上也有很多览露,我就總結(jié)一下比較實用和經(jīng)典的模擬登錄方法荧琼,大牛可繞過差牛。

1.模擬瀏覽器登錄

這個放在第一個說是比較簡單方便命锄,用splinter庫或者selenium庫可以模擬鍵盤和鼠標按鍵進行登錄和對瀏覽器的操作。

以下是代碼例子偏化。

例子說明:通過調(diào)用火狐瀏覽器進行模擬手工登錄脐恩,所以和平常人為的登錄極為相似,因此不用考慮請求和響應(yīng)侦讨。

#coding=utf-8

from selenium import webdriver

import time

driver=webdriver.Firefox()  #啟動火狐瀏覽器

url=''

driver.get(url)  #用瀏覽器訪問url

print 'before login========='



driver.find_element_by_id("login_email").clear()  #查看源碼并填入源碼中用戶名    的id,比如‘login_email’,該行是用來清除在登錄前登錄框中的字

driver.find_element_by_id("login_email").send_keys("") #輸入用戶名

driver.find_element_by_id("login_pwd").clear()   #查看源碼并填入源碼中密碼的id

,比如‘login_pwd’,該行是用來清楚在登錄前密碼框中的字

driver.find_element_by_id("login_pwd").send_keys("")    #輸入密碼

driver.find_element_by_class_name("login_btn").click()   #查看源碼中登錄按鈕的class名

time.sleep(5)

print 'After login========'

title=driver.title

print title

now_url=driver.current_url

print now_url

driver.quit()  #退出

2.“直接”登錄

用requests庫確實很方便驶冒,也不用進行urlencode,它自動幫你解決了url編碼韵卤。

拿人人網(wǎng)舉例(輸入對了就無驗證碼骗污,比較好)

兩種方法:

第一種是用requests

#coding:utf-8

import requests

url="http://www.renren.com/874215543/newsfeed/focus"

login_page = "http://www.renren.com/PLogin.do"

data={"email":'',"password":''}

headers={'User-agent':'Mozilla/5.0 (Windows NT 6.3;WOW64; rv:36.0) Gecko/201    00101 Firefox/36.0'}

res = requests.post(login_page, data = data,headers=headers)

res1=requests.get(url,cookies=res.cookies,headers=headers) #這種是登錄前和登錄后url不同的情況

print res1.content

第二種是用requests比較高級的用法session(其實和前一個是差不多的)

#coding:utf-8

import requests

url="http://www.renren.com/874215543/newsfeed/focus"

login_page = "http://www.renren.com/PLogin.do"

data={"email":'',"password":''}   #賬號密碼
headers={'User-agent':'Mozilla/5.0 (Windows NT 6.3;WOW64; rv:36.0) Gecko/201    00101 Firefox/36.0'}

s = requests.session()

res = s.post(login_page, data = data,headers=headers)

res1=s.get(url)

print res1.content

3.通過cookie進行模擬登陸,也是用的最多的方法沈条。

3-1.以下是例子需忿。

例子說明:通過抓包獲得headers和data,用程序?qū)ζ溥M行Post登錄蜡歹。需要自己先手動登陸一次屋厘,獲得登錄之后才能訪問的url,把這個url填入下面代碼的url變量中月而。注意辨別url和login_page汗洒。login_page是登陸框把登錄信息上傳的地址。

#encoding=utf-8

import urllib2

import urllib

import cookielib

import re

def renrenBrower(url,user,password):

    login_page = "http://www.renren.com/PLogin.do"   #抓包分析post地址

    try:

        #構(gòu)造一個opener來貯存cookie,每次都用opener來請求就可以.

         cj = cookielib.CookieJar()
         opener=urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
         opener.addheaders = [('User-agent','Mozilla/5.0 (Windows NT 6.3; WOW64; rv:36.0) Gecko/20100101 Firefox/36.0')]
         data = urllib.urlencode({"email":user,"password":password})
         opener.open(login_page,data)  #先請求post的url地址景鼠,拿到cookie之后再請求需要登錄后才能訪問的url,就是下一行。
         op=opener.open(url)   #利用得到的cookie請求該頁面
         data= op.read()
         return data

     except Exception,e:
         print str(e)

html = renrenBrower("http://www.renren.com/874215543",'','')  #帳號和密碼自己填
print html

還有一種情況铛漓,就是登錄后的url和登錄前的url不同溯香,有些是直接在url后加了特定的參數(shù)(每個人都不一樣)這個更要手動登錄測試,記下自己的參數(shù)浓恶,再繼續(xù)訪問玫坛。

3-2.也可以先手動登錄一遍再把cookie復制到headers上,這樣連賬號密碼都不用輸入包晰,只要cookie的有效期有多長湿镀,你就能用python登錄多久。如果cookie過期了伐憾,那么再復制一次就可以了勉痴。(一般用cookie模擬登錄都是有驗證碼的時候才用,不然還是感覺挺麻煩的树肃。蒸矛。。)

以下是例子(之前的一個信息安全比賽我寫的一個腳本截取一段)

#coding:utf-8

import requests

import urllib

import urllib2

import cookielib

url='http://ctf.ichunqiu.com/login/login'

url2='http://106.75.30.59:8888/'

headers={'User-agent':'Mozilla/5.0 (Windows NT 6.3; WOW64; rv:36.0) Gecko/20    100101 Firefox/36.0','Cookie':'ci_sessionctf=636c4e1e885eddbeaa02cc37541e0a1    0f7b3d84d; __jsluid=619476a61c2f57472b7fbcaab807bd47; Hm_lvt_1a32f7c66049188    7db0960e9c314b022=1468044539; Hm_lpvt_1a32f7c660491887db0960e9c314b022=14680    44539'}   #把cookie加進來

req = urllib2.Request(url2, headers=headers)

r = urllib2.urlopen(req)

也可以將cookie存在txt中胸嘴,再進行調(diào)用雏掠。

這是保存cookie。

encoding=utf-8

import urllib2  1 #coding:utf-8

import cookielib

import urllib2

#設(shè)置保存cookie的文件劣像,同級目錄下的cookie.txt

filename = 'cookie1.txt'

#聲明一個MozillaCookieJar對象實例來保存cookie乡话,之后寫入文件

cookie = cookielib.MozillaCookieJar(filename)

#利用urllib2庫的HTTPCookieProcessor對象來創(chuàng)建cookie處理器

handler = urllib2.HTTPCookieProcessor(cookie)

#通過handler來構(gòu)建opener

opener = urllib2.build_opener(handler)

#創(chuàng)建一個請求,原理同urllib2的urlopen

response = opener.open("https://www.baidu.com")

#保存cookie到文件

cookie.save(ignore_discard=True, ignore_expires=True)

這是調(diào)用cookie耳奕。

import urllib

import cookielib

import re



#創(chuàng)建MozillaCookieJar實例對象

cookie = cookielib.MozillaCookieJar()

#從文件中讀取cookie內(nèi)容到變量

cookie.load('cookie.txt', ignore_discard=True, ignore_expires=True)

#創(chuàng)建請求的request

req = urllib2.Request("http://www.baidu.com")

#利用urllib2的build_opener方法創(chuàng)建一個opener

opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie))

response = opener.open(req)

print response.read()

4.繞過驗證碼模擬登陸

如果有驗證碼怎么辦绑青?

這分幾種情況,如果驗證碼簡單(字母比較正吮铭,周圍沒啥干擾)时迫,就可以去識別驗證碼,暴力進入谓晌,不過現(xiàn)在網(wǎng)站很少有這么簡單了驗證碼掠拳。當然,難的驗證碼也有難的識別方法纸肉,這個不在本文討論范圍溺欧,以后可以專門寫一篇關(guān)于識別驗證碼的。這里就用一些“巧勁”來繞過不好識別的驗證碼模擬登陸柏肪。

以下為網(wǎng)上的一個思路挺不錯的例子

例子思路:先訪問驗證碼url來獲取cookie,在利用這個cookie去post你登錄需要的信息烦味。因為驗證碼是每次訪問都在變化的壁拉,所以它一般是根據(jù)一個用戶的headers來判斷,確切的說應(yīng)該是cookie或者referer弃理。

#coding:utf-8

import urllib2

import cookielib

import urllib

import re

import sys



CaptchaUrl = "http://202.115.80.153/CheckCode.aspx"

PostUrl = "http://202.115.80.153/default2.aspx"

#驗證碼地址和post地址

cookie = cookielib.CookieJar()

handler = urllib2.HTTPCookieProcessor(cookie)

opener = urllib2.build_opener(handler)

#將cookies綁定到一個opener cookie由cookielib自動管理,和前一個例子一樣屎蜓,用來貯存cookie的

username = 'username'

password = 'password123'

#用戶名和密碼

picture = opener.open(CaptchaUrl).read()

#用openr訪問驗證碼地址,獲取cookie

local = open('e:/image.jpg', 'wb')

local.write(picture)

local.close()

#保存驗證碼到本地

SecretCode = raw_input('輸入驗證碼:')

#打開保存的驗證碼圖片 輸入

postData = {

     '__VIEWSTATE': 'dDwyODE2NTM0OTg7Oz6pH0TWZk5t0lupp/tlA1L+rmL83g==',

     'txtUserName': username,

     'TextBox2': password,

     'txtSecretCode': SecretCode,

     'RadioButtonList1': '學生',

     'Button1': '',

     'lbLanguage': '',

     'hidPdrs': '',

     'hidsc': '',

 }

 #根據(jù)抓包信息 構(gòu)造表單

headers = {

     'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',

     'Accept-Language': 'zh-CN,zh;q=0.8',

     'Connection': 'keep-alive',

     'Content-Type': 'application/x-www-form-urlencoded',

     'User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.86 Safari/537.36',

 }

 #根據(jù)抓包信息 構(gòu)造headers

data = urllib.urlencode(postData)

#生成post數(shù)據(jù)?key1=value1&key2=value2的形式

request = urllib2.Request(PostUrl, data, headers)

#構(gòu)造request請求

try:

 response = opener.open(request)

 result = response.read().decode('gb2312')

 #由于該網(wǎng)頁是gb2312的編碼痘昌,所以需要解碼

 print result

 #打印登錄后的頁面

except urllib2.HTTPError, e:

 print e.code

 #利用之前存有cookie的opener登錄頁面

或者也可以用cookie登錄的方法繞過驗證碼炬转,參考第二種方法。

有什么錯誤或者更好的方法歡迎指正探討扼劈。

暫時就像到這么多驻啤,想到了再繼續(xù)更.....

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市测僵,隨后出現(xiàn)的幾起案子街佑,更是在濱河造成了極大的恐慌捍靠,老刑警劉巖沐旨,帶你破解...
    沈念sama閱讀 218,036評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件榨婆,死亡現(xiàn)場離奇詭異,居然都是意外死亡谊迄,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評論 3 395
  • 文/潘曉璐 我一進店門统诺,熙熙樓的掌柜王于貴愁眉苦臉地迎上來疑俭,“玉大人粮呢,你說我怎么就攤上這事钞艇。” “怎么了哩照?”我有些...
    開封第一講書人閱讀 164,411評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長识藤。 經(jīng)常有香客問我砚著,道長痴昧,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,622評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮版确,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘绒疗。我一直安慰自己,他們只是感情好吓蘑,可當我...
    茶點故事閱讀 67,661評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著磨镶,像睡著了一般。 火紅的嫁衣襯著肌膚如雪琳猫。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,521評論 1 304
  • 那天统刮,我揣著相機與錄音,去河邊找鬼侥蒙。 笑死,一個胖子當著我的面吹牛鞭衩,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播醋旦,決...
    沈念sama閱讀 40,288評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼会放,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了咧最?” 一聲冷哼從身側(cè)響起御雕,我...
    開封第一講書人閱讀 39,200評論 0 276
  • 序言:老撾萬榮一對情侶失蹤滥搭,失蹤者是張志新(化名)和其女友劉穎酸纲,沒想到半個月后瑟匆,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,644評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡愁溜,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,837評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了代承。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,953評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡论悴,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出墓律,到底是詐尸還是另有隱情,我是刑警寧澤耻讽,帶...
    沈念sama閱讀 35,673評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站齐饮,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏祖驱。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,281評論 3 329
  • 文/蒙蒙 一乡洼、第九天 我趴在偏房一處隱蔽的房頂上張望匕坯。 院中可真熱鬧束昵,春花似錦葛峻、人聲如沸锹雏。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至政勃,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間奸远,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評論 1 269
  • 我被黑心中介騙來泰國打工讽挟, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人戏挡。 一個月前我還...
    沈念sama閱讀 48,119評論 3 370
  • 正文 我出身青樓晨仑,卻偏偏與公主長得像,于是被迫代替她去往敵國和親洪己。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,901評論 2 355

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

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理逝钥,服務(wù)發(fā)現(xiàn)拱镐,斷路器艘款,智...
    卡卡羅2017閱讀 134,656評論 18 139
  • HTTP cookie(也稱為web cookie,網(wǎng)絡(luò)cookie,瀏覽器cookie或者簡稱cookie)是網(wǎng)...
    留七七閱讀 17,959評論 2 71
  • http://www.91ri.org/tag/fuzz-bug 通常情況下哗咆,有三種方法被廣泛用來防御CSRF攻擊...
    jdyzm閱讀 4,173評論 0 5
  • 從三月份找實習到現(xiàn)在益眉,面了一些公司晌柬,掛了不少郭脂,但最終還是拿到小米、百度展鸡、阿里、京東莹弊、新浪凯砍、CVTE、樂視家的研發(fā)崗...
    時芥藍閱讀 42,246評論 11 349
  • 最近很多朋友問我怎么沒有更新公眾號了悟衩,我說在忙別的事情栓拜,靜下來想想這十來天的時光座泳,說長不長幕与,說短也不短挑势,再回頭我也...
    最貍的一只閱讀 227評論 0 1