最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python模擬登錄的多種方法(四種)

 更新時間:2018年06月01日 10:41:53   作者:半吊子python全棧  
這篇文章主要介紹了Python模擬登錄的多種方法,大概給大家提供了四種方法,每種方法給大家介紹的都很詳細,感興趣的朋友跟隨腳本之家小編一起看看吧

正文

方法一:直接使用已知的cookie訪問

特點:

  簡單,但需要先在瀏覽器登錄

原理:

  簡單地說,cookie保存在發(fā)起請求的客戶端中,服務(wù)器利用cookie來區(qū)分不同的客戶端。因為http是一種無狀態(tài)的連接,當(dāng)服務(wù)器一下子收到好幾個請求時,是無法判斷出哪些請求是同一個客戶端發(fā)起的。而“訪問登錄后才能看到的頁面”這一行為,恰恰需要客戶端向服務(wù)器證明:“我是剛才登錄過的那個客戶端”。于是就需要cookie來標(biāo)識客戶端的身份,以存儲它的信息(如登錄狀態(tài))。

  當(dāng)然,這也意味著,只要得到了別的客戶端的cookie,我們就可以假冒成它來和服務(wù)器對話。這給我們的程序帶來了可乘之機。

  我們先用瀏覽器登錄,然后使用開發(fā)者工具查看cookie。接著在程序中攜帶該cookie向網(wǎng)站發(fā)送請求,就能讓你的程序假扮成剛才登錄的那個瀏覽器,得到只有登錄后才能看到的頁面。

具體步驟:

1.用瀏覽器登錄,獲取瀏覽器里的cookie字符串

  先使用瀏覽器登錄。再打開開發(fā)者工具,轉(zhuǎn)到network選項卡。在左邊的Name一欄找到當(dāng)前的網(wǎng)址,選擇右邊的Headers選項卡,查看Request Headers,這里包含了該網(wǎng)站頒發(fā)給瀏覽器的cookie。對,就是后面的字符串。把它復(fù)制下來,一會兒代碼里要用到。

  注意,最好是在運行你的程序前再登錄。如果太早登錄,或是把瀏覽器關(guān)了,很可能復(fù)制的那個cookie就過期無效了。

2.寫代碼

  urllib庫的版本:

import sys
import io
from urllib import request
sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='utf8') #改變標(biāo)準(zhǔn)輸出的默認編碼
#登錄后才能訪問的網(wǎng)站
url = 'http://ssfw.xmu.edu.cn/cmstar/index.portal'
#瀏覽器登錄后得到的cookie,也就是剛才復(fù)制的字符串
cookie_str = r'JSESSIONID=xxxxxxxxxxxxxxxxxxxxxx; iPlanetDirectoryPro=xxxxxxxxxxxxxxxxxx'
#登錄后才能訪問的網(wǎng)頁
url = 'http://ssfw.xmu.edu.cn/cmstar/index.portal'
req = request.Request(url)
#設(shè)置cookie
req.add_header('cookie', raw_cookies)
#設(shè)置請求頭
req.add_header('User-Agent', 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36')
resp = request.urlopen(req)
print(resp.read().decode('utf-8'))

  requests庫的版本:

import requests
import sys
import io
sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='utf8') #改變標(biāo)準(zhǔn)輸出的默認編碼
#登錄后才能訪問的網(wǎng)頁
url = 'http://ssfw.xmu.edu.cn/cmstar/index.portal'
#瀏覽器登錄后得到的cookie,也就是剛才復(fù)制的字符串
cookie_str = r'JSESSIONID=xxxxxxxxxxxxxxxxxxxxxx; iPlanetDirectoryPro=xxxxxxxxxxxxxxxxxx'
#把cookie字符串處理成字典,以便接下來使用
cookies = {}
for line in cookie_str.split(';'):
 key, value = line.split('=', 1)
 cookies[key] = value

方法二:模擬登錄后再攜帶得到的cookie訪問

原理:

  我們先在程序中向網(wǎng)站發(fā)出登錄請求,也就是提交包含登錄信息的表單(用戶名、密碼等)。從響應(yīng)中得到cookie,今后在訪問其他頁面時也帶上這個cookie,就能得到只有登錄后才能看到的頁面。

具體步驟:

1.找出表單提交到的頁面

  還是要利用瀏覽器的開發(fā)者工具。轉(zhuǎn)到network選項卡,并勾選Preserve Log(重要?。T跒g覽器里登錄網(wǎng)站。然后在左邊的Name一欄找到表單提交到的頁面。怎么找呢?看看右側(cè),轉(zhuǎn)到Headers選項卡。首先,在General那段,Request Method應(yīng)當(dāng)是POST。其次最下方應(yīng)該要有一段叫做Form Data的,里面可以看到你剛才輸入的用戶名和密碼等。也可以看看左邊的Name,如果含有l(wèi)ogin這個詞,有可能就是提交表單的頁面(不一定?。?/p>

  這里要強調(diào)一點,“表單提交到的頁面”通常并不是你填寫用戶名和密碼的頁面!所以要利用工具來找到它。

2.找出要提交的數(shù)據(jù)

  雖然你在瀏覽器里登陸時只填了用戶名和密碼,但表單里包含的數(shù)據(jù)可不只這些。從Form Data里就可以看到需要提交的所有數(shù)據(jù)。

3.寫代碼

   urllib庫的版本:

import sys
import io
import urllib.request
import http.cookiejar
sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='utf8') #改變標(biāo)準(zhǔn)輸出的默認編碼
#登錄時需要POST的數(shù)據(jù)
data = {'Login.Token1':'學(xué)號', 
 'Login.Token2':'密碼', 
 'goto:http':'//ssfw.xmu.edu.cn/cmstar/loginSuccess.portal', 
 'gotoOnFail:http':'//ssfw.xmu.edu.cn/cmstar/loginFailure.portal'}
post_data = urllib.parse.urlencode(data).encode('utf-8')
#設(shè)置請求頭
headers = {'User-agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36'}
#登錄時表單提交到的地址(用開發(fā)者工具可以看到)
login_url = ' http://ssfw.xmu.edu.cn/cmstar/userPasswordValidate.portal
#構(gòu)造登錄請求
req = urllib.request.Request(login_url, headers = headers, data = post_data)
#構(gòu)造cookie
cookie = http.cookiejar.CookieJar()
#由cookie構(gòu)造opener
opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cookie))
#發(fā)送登錄請求,此后這個opener就攜帶了cookie,以證明自己登錄過
resp = opener.open(req)
#登錄后才能訪問的網(wǎng)頁
url = 'http://ssfw.xmu.edu.cn/cmstar/index.portal'
#構(gòu)造訪問請求
req = urllib.request.Request(url, headers = headers)
resp = opener.open(req)
print(resp.read().decode('utf-8'))

  requests庫的版本:

import requests
import sys
import io
sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='utf8') #改變標(biāo)準(zhǔn)輸出的默認編碼
#登錄后才能訪問的網(wǎng)頁
url = 'http://ssfw.xmu.edu.cn/cmstar/index.portal'
#瀏覽器登錄后得到的cookie,也就是剛才復(fù)制的字符串
cookie_str = r'JSESSIONID=xxxxxxxxxxxxxxxxxxxxxx; iPlanetDirectoryPro=xxxxxxxxxxxxxxxxxx'
#把cookie字符串處理成字典,以便接下來使用
cookies = {}
for line in cookie_str.split(';'):
 key, value = line.split('=', 1)
 cookies[key] = value
#設(shè)置請求頭
headers = {'User-agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36'}
#在發(fā)送get請求時帶上請求頭和cookies
resp = requests.get(url, headers = headers, cookies = cookies)
print(resp.content.decode('utf-8'))

  明顯感覺requests庫用著更方便啊~~~

方法三:模擬登錄后用session保持登錄狀態(tài)

原理:

  session是會話的意思。和cookie的相似之處在于,它也可以讓服務(wù)器“認得”客戶端。簡單理解就是,把每一個客戶端和服務(wù)器的互動當(dāng)作一個“會話”。既然在同一個“會話”里,服務(wù)器自然就能知道這個客戶端是否登錄過。

具體步驟:

1.找出表單提交到的頁面

2.找出要提交的數(shù)據(jù)

  這兩步和方法二的前兩步是一樣的

3.寫代碼

  requests庫的版本

import requests
import sys
import io
sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='utf8') #改變標(biāo)準(zhǔn)輸出的默認編碼
#登錄時需要POST的數(shù)據(jù)
data = {'Login.Token1':'學(xué)號', 
 'Login.Token2':'密碼', 
 'goto:http':'//ssfw.xmu.edu.cn/cmstar/loginSuccess.portal', 
 'gotoOnFail:http':'//ssfw.xmu.edu.cn/cmstar/loginFailure.portal'}
#設(shè)置請求頭
headers = {'User-agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36'}
#登錄時表單提交到的地址(用開發(fā)者工具可以看到)
login_url = 'http://ssfw.xmu.edu.cn/cmstar/userPasswordValidate.portal'
#構(gòu)造Session
session = requests.Session()
#在session中發(fā)送登錄請求,此后這個session里就存儲了cookie
#可以用print(session.cookies.get_dict())查看
resp = session.post(login_url, data)
#登錄后才能訪問的網(wǎng)頁
url = 'http://ssfw.xmu.edu.cn/cmstar/index.portal'
#發(fā)送訪問請求
resp = session.get(url)
print(resp.content.decode('utf-8'))

方法四:使用無頭瀏覽器訪問

特點:

  功能強大,幾乎可以對付任何網(wǎng)頁,但會導(dǎo)致代碼效率低

原理:

  如果能在程序里調(diào)用一個瀏覽器來訪問網(wǎng)站,那么像登錄這樣的操作就輕而易舉了。在Python中可以使用Selenium庫來調(diào)用瀏覽器,寫在代碼里的操作(打開網(wǎng)頁、點擊……)會變成瀏覽器忠實地執(zhí)行。這個被控制的瀏覽器可以是Firefox,Chrome等,但最常用的還是PhantomJS這個無頭(沒有界面)瀏覽器。也就是說,只要把填寫用戶名密碼、點擊“登錄”按鈕、打開另一個網(wǎng)頁等操作寫到程序中,PhamtomJS就能確確實實地讓你登錄上去,并把響應(yīng)返回給你。

具體步驟:

1.安裝selenium庫、PhantomJS瀏覽器

2.在源代碼中找到登錄時的輸入文本框、按鈕這些元素

  因為要在無頭瀏覽器中進行操作,所以就要先找到輸入框,才能輸入信息。找到登錄按鈕,才能點擊它。

  在瀏覽器中打開填寫用戶名密碼的頁面,將光標(biāo)移動到輸入用戶名的文本框,右鍵,選擇“審查元素”,就可以在右邊的網(wǎng)頁源代碼中看到文本框是哪個元素。同理,可以在源代碼中找到輸入密碼的文本框、登錄按鈕。

3.考慮如何在程序中找到上述元素

  Selenium庫提供了find_element(s)_by_xxx的方法來找到網(wǎng)頁中的輸入框、按鈕等元素。其中xxx可以是id、name、tag_name(標(biāo)簽名)、class_name(class),也可以是xpath(xpath表達式)等等。當(dāng)然還是要具體分析網(wǎng)頁源代碼。

4.寫代碼

import requests
import sys
import io
from selenium import webdriver
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf8') #改變標(biāo)準(zhǔn)輸出的默認編碼
#建立Phantomjs瀏覽器對象,括號里是phantomjs.exe在你的電腦上的路徑
browser = webdriver.PhantomJS('d:/tool/07-net/phantomjs-windows/phantomjs-2.1.1-windows/bin/phantomjs.exe')
#登錄頁面
url = r'http://ssfw.xmu.edu.cn/cmstar/index.portal'
# 訪問登錄頁面
browser.get(url)
# 等待一定時間,讓js腳本加載完畢
browser.implicitly_wait(3)
#輸入用戶名
username = browser.find_element_by_name('user')
username.send_keys('學(xué)號')
#輸入密碼
password = browser.find_element_by_name('pwd')
password.send_keys('密碼')
#選擇“學(xué)生”單選按鈕
student = browser.find_element_by_xpath('//input[@value="student"]')
student.click()
#點擊“登錄”按鈕
login_button = browser.find_element_by_name('btn')
login_button.submit()
#網(wǎng)頁截圖
browser.save_screenshot('picture1.png')
#打印網(wǎng)頁源代碼
print(browser.page_source.encode('utf-8').decode())
browser.quit()

總結(jié)

以上所述是小編給大家介紹的Python模擬登錄的多種方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

  • python3.5+tesseract+adb實現(xiàn)西瓜視頻或頭腦王者輔助答題

    python3.5+tesseract+adb實現(xiàn)西瓜視頻或頭腦王者輔助答題

    這篇文章主要介紹了python3.5+tesseract+adb實現(xiàn)西瓜視頻或頭腦王者輔助答題,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • 連接Python程序與MySQL的教程

    連接Python程序與MySQL的教程

    這篇文章主要介紹了連接Python程序與MySQL的教程,MySQL作為最具人氣的數(shù)據(jù)庫,與程序之間的連接也成為了如今Python學(xué)習(xí)中近乎必備的知識,需要的朋友可以參考下
    2015-04-04
  • 在Pandas中處理NaN值的方法

    在Pandas中處理NaN值的方法

    這篇文章主要介紹了在Pandas中處理NaN值的方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • python學(xué)習(xí)之panda數(shù)據(jù)分析核心支持庫

    python學(xué)習(xí)之panda數(shù)據(jù)分析核心支持庫

    這篇文章主要給大家介紹了關(guān)于python學(xué)習(xí)之panda數(shù)據(jù)分析核心支持庫的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-05-05
  • python的正則表達式和re模塊詳解

    python的正則表達式和re模塊詳解

    這篇文章主要為大家詳細介紹了python的正則表達式和re模塊,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • python基礎(chǔ)篇之pandas常用基本函數(shù)匯總

    python基礎(chǔ)篇之pandas常用基本函數(shù)匯總

    Pandas是一個python數(shù)據(jù)分析庫,它提供了許多函數(shù)和方法來加快數(shù)據(jù)分析過程,下面這篇文章主要給大家介紹了關(guān)于python基礎(chǔ)篇之pandas常用基本函數(shù)的相關(guān)資料,需要的朋友可以參考下
    2022-07-07
  • Python流程控制if條件選擇與for循環(huán)

    Python流程控制if條件選擇與for循環(huán)

    這篇文章主要介紹了Python流程控制if條件選擇與for循環(huán),文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的朋友可以參考一下
    2022-07-07
  • 200行自定義python異步非阻塞Web框架

    200行自定義python異步非阻塞Web框架

    本篇將使用200行代碼完成一個微型異步非阻塞Web框架:Snow。具有很好的參考價值,下面跟著小編一起來看下吧
    2017-03-03
  • Python json序列化解讀

    Python json序列化解讀

    這篇文章主要介紹了Python json序列化解讀,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-03-03
  • python topk()函數(shù)求最大和最小值實例

    python topk()函數(shù)求最大和最小值實例

    這篇文章主要介紹了python topk()函數(shù)求最大和最小值實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04

最新評論

温州市| 天长市| 浏阳市| 张家口市| 桐梓县| 乐业县| 德令哈市| 密山市| 南宫市| 嘉祥县| 涟水县| 龙江县| 宜君县| 肥城市| 丹江口市| 绿春县| 根河市| 阜阳市| 苏尼特左旗| 金昌市| 敦化市| 兴化市| 岳普湖县| 宿迁市| 东乌| 海安县| 南京市| 泗阳县| 平塘县| 德格县| 苏尼特左旗| 舒兰市| 怀来县| 百色市| 博湖县| 弋阳县| 宜兴市| 内乡县| 乌海市| 菏泽市| 湟源县|