python selenium2 有關cookie操作實例及如何繞開驗證碼


1.先看一下cookie是啥

cookie是訪問web時服務器記錄在用戶本地的一系列用戶信息(比如用戶登錄信息),以便對用戶進行識別

from selenium import webdriver
import time

base_url = "https://www.baidu.com"

driver = webdriver.Firefox()
driver.implicitly_wait(10)
driver.get(base_url)

#打印所有cookie
print driver.get_cookies()

得到如下打印

列表中為所有cookie,不同的cookie在其中各字典中

cookie_1 = {u'domain': u'.baidu.com',
u'name': u'BDORZ',
u'value': u'B490B5xxxxxxxxxxxxxxxxxDA1598',
u'expiry': 1490346310,
u'path': u'/',
u'httpOnly': False,
u'secure': False}

name:cookie的名稱

value:cookie對應的值,動態生成的

domain:服務器域名

expiry:cookie有效終止日期

path:Path屬性定義了Web服務器上哪些路徑下的頁面可獲取服務器設置的cookie

httpOnly:防腳本攻擊

secure:在cookie中標記該變量,表明只有當瀏覽器和Web Server之間的通信協議為加密認證協議時(當前即https),瀏覽器才向服務器提交相應的cookie

2.使用cookie繞開登錄驗證碼

登錄百度時需要輸入驗證碼,我們抓取登錄前的cookie,和登錄后的cookie,對比發生的變化

首先打開fiddler抓包

執行如下腳本,注意在輸入驗證碼時腳本無法處理,所以加了等待,這時可以自己手動輸入驗證碼,然后等待click

#coding=utf-8
from selenium import webdriver
import time

base_url = "https://www.baidu.com"
usr_name = "xxoo"
usr_pwd = "xxoo"

driver = webdriver.Firefox()
driver.implicitly_wait(10)

#清除所有cookie
driver.delete_all_cookies()
driver.get(base_url)
print driver.get_cookies()

driver.find_element_by_link_text(u"登錄").click()
driver.find_element_by_css_selector("#TANGRAM__PSP_8__userName").send_keys(usr_name)
driver.find_element_by_css_selector("#TANGRAM__PSP_8__password").send_keys(usr_pwd)
time.sleep(10)
#在這個等待的時間里去手動輸入驗證碼

driver.find_element_by_css_selector("#TANGRAM__PSP_8__submit").click() time.sleep(3) #打印登錄后的cookie print driver.get_cookies()

在打印中我們得到如下所有cookie

在fiddler抓包中找到登錄前后的包,其中有對應的cookie

登錄前

登錄后

這里的cookie中只能體現name和value信息,cookie的完整格式在前面講到

對比前后cookie可以看到登錄后多了BDORZ和BDUSS信息

那么我們在前面腳本打印的cookie中提出對應的這兩組cookie,寫入新的腳本中

執行新的腳本發現,不在需要輸入用戶名密碼和驗證碼了,刷新后就會進入登錄狀態

#coding=utf-8
from selenium import webdriver
import time

base_url = "https://www.baidu.com"
driver = webdriver.Firefox()
driver.implicitly_wait(10)

#清除所有cookie
driver.delete_all_cookies()
driver.get(base_url)

cookie_1 = {u'domain': u'.baidu.com',
            u'name': u'BDORZ',
            u'value': u'B490B5EBXXXXXXXXXXXXXDA1598',
            u'expiry': 1490346310,
            u'path': u'/',
            u'httpOnly': False,
            u'secure': False}

cookie_2 = {u'domain': u'.baidu.com',
            u'name': u'BDUSS',
            u'value': u'o0Z29lNFRPOE85TXXXXXXXXXXXXXXXXXXXXXXXXXXXQnk2Rno3dmFIUHRZSVFBQUFBJCQAAAAAAAAAAAEAAAC8yRwCXXXXd2VlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANqP01jaj9NYak',
            u'expiry': 1749459934,
            u'path': u'/',
            u'httpOnly': True,
            u'secure': False}

#添加cookie
driver.add_cookie(cookie_1)
driver.add_cookie(cookie_2)
time.sleep(2)
driver.refresh()

 

#水平拙劣,不妥之處請指正


免責聲明!

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



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