selenium(四)操作cookie,偽造cookie


簡介:

Cookie,有時也用其復數形式 Cookies,指某些網站為了辨別用戶身份、進行 session 跟蹤而儲存在用戶本地終端上的數據。

常見的用途就是保留用戶登陸信息,登陸時的7天免登陸,記住我…………這些都是通過cookie實現的。

一:認識cookie

還是firefox,打開百度,登陸一下,shifit+F9,即可彈出存儲探查器。看到cookie了吧,百度給你留下的東西還真不少。

chrome快捷鍵是ctrl+shifit+i

 

Cookie由變量名和值組成,類似Javascript變量。其屬性里既有標准的Cookie變量,也有用戶自己創建的變量,屬性中變量是用“變量=值”形式來保存。
  根據Netscape公司的規定,Cookie格式如下:

  Set-Cookie: NAME=VALUE;Expires=DATE;Path=PATH;Domain=DOMAIN_NAME;SECURE
  NAME=VALUE
  這是每一個Cookie均必須有的部分。NAME是該Cookie的名稱,VALUE是該Cookie的值。在字符串“NAME=VALUE”中,不含分號、逗號和空格等字符。
  Expires=DATE:Expires變量是一個只寫變量,它確定了Cookie有效終止日期。該屬性值DATE必須以特定的格式來書寫:星期幾,DD-MM-YY HH:MM:SS GMT,GMT表示這是格林尼治時間。反之,不以這樣的格式來書寫,系統將無法識別。該變量可省,如果缺省時,則Cookie的屬性值不會保存在用戶的硬盤中,而僅僅保存在內存當中,Cookie文件將隨着瀏覽器的關閉而自動消失。
  Domain=DOMAIN-NAME:Domain該變量是一個只寫變量,它確定了哪些Internet域中的Web服務器可讀取瀏覽器所存取的Cookie,即只有來自這個域的頁面才可以使用Cookie中的信息。這項設置是可選的,如果缺省時,設置Cookie的屬性值為該Web服務器的域名。
  Path=PATH:Path屬性定義了Web服務器上哪些路徑下的頁面可獲取服務器設置的Cookie。一般如果用戶輸入的URL中的路徑部分從第一個字符開始包含Path屬性所定義的字符串,瀏覽器就認為通過檢查。如果Path屬性的值為“/”,則Web服務器上所有的WWW資源均可讀取該Cookie。同樣該項設置是可選的,如果缺省時,則Path的屬性值為Web服務器傳給瀏覽器的資源的路徑名。
  可以看出我們借助對Domain和Path兩個變量的設置,即可有效地控制Cookie文件被訪問的范圍。
  Secure:在Cookie中標記該變量,表明只有當瀏覽器和Web Server之間的通信協議為加密認證協議時,瀏覽器才向服務器提交相應的Cookie。當前這種協議只有一種,即為HTTPS。

 二:python+selenium 獲取cookie

嘗試運行下面的代碼

from selenium import webdriver

driver=webdriver.Firefox()
driver.get('http://www.baidu.com')
cookie=driver.get_cookies()
print(cookie)
driver.quit()
print('----------')
driver=webdriver.Chrome()
driver.get('http://www.baidu.com')
cookie=driver.get_cookies()
print(cookie)
driver.quit()

輸出結果大概是這樣的:

firefox

[{'name': 'BAIDUID', 'value': '53****************

chrome

[{'domain': '.baidu.com', 'httpOnly': False, 'name': 'H***********

這是由字典組成的列表,也就是列表的嵌套。

分解看一下:

from selenium import webdriver

driver=webdriver.Firefox()
driver.get('http://www.baidu.com')
cookie=driver.get_cookies()
print('firefox')
print(cookie)
for i in cookie:
    for k,v in i.items():
        print(k,'-->',v)
    print('-------')
driver.quit()
print('-------------------')
driver=webdriver.Chrome()
driver.get('http://www.baidu.com')
cookie=driver.get_cookies()
print('chrome')
print(cookie)
for i in cookie:
    for k,v in i.items():
        print(k,'-->',v)
    print('-------')
driver.quit()

結果比較多,firefox chrome各取一組吧

firefox:

name --> BAIDUID
value --> 77E48BCEEFBD3936310DDD65BF9B2732:FG=1
path --> /
domain --> .baidu.com
expiry --> 3665365219
secure --> False
httpOnly --> False

chrome:

domain --> .baidu.com
expiry --> 1549417579.219434
httpOnly --> False
name --> BAIDUID
path --> /
secure --> False
value --> E5F0899A387E3944B0B8F09D255D9A73:FG=1

雖然順序不一樣,但是結構是一樣的。

domain   path name value expiry secure httpOnly

三:寫入cookie

首先介紹一個web調試網站:http://httpbin.org/

這個網站就是調試web用的,比如說我們現在操作的cookie,和服務器交互等等的原理不考慮,但是我們和服務器交互的內容怎么看呢?

這個網站就提供了顯示交互內容的功能,不僅有cookie,還有ip user-agent headers …………

現在我們看一下cookies       http://httpbin.org/cookies

 

 cookies是空的。

我們嘗試一下寫個cookie進去。

"""
        Adds a cookie to your current session.

        :Args:
         - cookie_dict: A dictionary object, with required keys - "name" and "value";
            optional keys - "path", "domain", "secure", "expiry"

        Usage:
            driver.add_cookie({'name' : 'foo', 'value' : 'bar'})
            driver.add_cookie({'name' : 'foo', 'value' : 'bar', 'path' : '/'})
            driver.add_cookie({'name' : 'foo', 'value' : 'bar', 'path' : '/', 'secure':True})

        """
from time import sleep
from selenium import webdriver

driver = webdriver.Firefox()
driver.get('http://httpbin.org/cookies')
print(driver.get_cookies())
c1 = {
    'name':'username',
    'value':'jackadam',
    # 'path':'/',
    # 'domain':'httpbin.org',
    # 'secure':False,
    # 'expiry':None,
}
driver.add_cookie(c1)
print(driver.get_cookies())
sleep(3)
driver.refresh()
sleep(3)
driver.quit()

 

首先訪問http://httpbin.org/cookies,然后增加一條cookie,等3秒后刷新,再等3秒,關閉瀏覽器。

官方文檔寫的,必選項name value,可選項path domain secure expiry

所以,注釋掉的可選項,你也可以加上去。

注意:要首先打開這個網站,才可以給這個網站增加cookie。或許可以通過profile方式,先加載cookie再打開網站(研究中)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM