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()
#水平拙劣,不妥之處請指正