標籤:nal java 標記 xxx 加密 帳號 提高 日期 drive
前言
驗證碼這種問題是比較頭疼的,對於驗證碼的處理,不要去想破解方法,這個驗證碼本來就是為了防止別人自動化登入的。如果你能破解,說明你們公司的驗證碼嗎安全層級不高,那就需要提進階別了。
對應驗證碼,要麼是讓開發在測試環境弄個萬能的驗證碼,如:1234,要麼就是盡量繞過去,如本篇介紹的添加cookie的方法。
一、fiddler抓包
1.前一篇講到,登入後會產生一個已登入狀態的cookie,那麼只需要直接把這個值添加到cookies裡面就可以了。
2.可以先手動登入一次,然後抓取這個cookie,這裡就需要用抓包工具fiddler了
3.先開啟部落格園登入介面,手動輸入帳號和密碼(不要點登入按鈕)
4.開啟fiddler抓包工具,此時再點部落格園登入按鈕
5.登入成功後,再查看cookie變化,發現多了兩組參數,多的這兩組參數就是我們想要的,copy出來,一會有用
二、添加cookie方法:driver.add_cookie()
1.add_cookie(cookie_dict)方法裡面參數是cookie_dict,上面裡面參數是字典類型。
2.源碼官方文檔介紹:
add_cookie(self, cookie_dict)
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})
3.從官方的文檔裡面可以看出,添加cookie時候傳入字典類型就可以了,等號左邊的是name,等號左邊的是value。
4.把前面抓到的兩組資料(參數不僅僅只有name和value),寫成字典類型:
{‘name‘:‘.CNBlogsCookie‘,‘value‘:‘2C3AE01E461B2D2F1572D02CB936D77A053089AA2xxxx...‘}
{‘name‘:‘.Cnblogs.AspNetCore.Cookies‘,‘value‘:‘CfDJ8Mmb5OBERd5FqtiQlKZZIG4HKz_Zxxx...‘}
三、cookie組成結構
1.用抓包工具fidller只能看到cookie的name和value兩個參數,實際上cookie還有其它參數
2.cookie參數組成,以下參數是我通過get_cookie(name)擷取到的,
參考上一篇:Selenium2+python自動化40-cookie相關操作
cookie ={u‘domain‘: u‘.cnblogs.com‘,
u‘name‘: u‘.CNBlogsCookie‘,
u‘value‘: u‘xxxx‘,
u‘expiry‘: 1491887887,
u‘path‘: u‘/‘,
u‘httpOnly‘: True,
u‘secure‘: False}
name:cookie的名稱
value:cookie對應的值,動態產生的
domain:伺服器網域名稱
expiry:Cookie有效終止日期
path:Path屬性定義了Web伺服器上哪些路徑下的頁面可擷取伺服器設定的Cookie
httpOnly:防指令碼攻擊
secure:在Cookie中標記該變數,表明只有當瀏覽器和Web Server之間的通訊協定為加密認證協議時,
瀏覽器才向伺服器提交相應的Cookie。當前這種協議只有一種,即為HTTPS。
四、添加cookie
1.這裡需要添加兩個cookie,一個是.CNBlogsCookie,另外一個是.Cnblogs.AspNetCore.Cookies。
2.我這裡開啟的網頁是部落格的首頁:http://www.cnblogs.com/yoyoketang,沒進入登入頁。
3.添加cookie後重新整理頁面,接下來就是見證奇蹟的時刻了。
五、參考代碼:
# coding:utf-8
from selenium import webdriver
import time
driver = webdriver.Firefox()
driver.get("http://www.cnblogs.com/yoyoketang")
# # 添加cookie
c1 = {u‘domain‘: u‘.cnblogs.com‘,
u‘name‘: u‘.CNBlogsCookie‘,
u‘value‘: u‘xxxx‘,
u‘expiry‘: 1491887887,
u‘path‘: u‘/‘,
u‘httpOnly‘: True,
u‘secure‘: False}
c2 = {u‘domain‘: u‘.cnblogs.com‘,
u‘name‘: u‘.Cnblogs.AspNetCore.Cookies‘,
u‘value‘: u‘xxxx‘,
u‘expiry‘: 1491887887,
u‘path‘: u‘/‘,
u‘httpOnly‘: True,
u‘secure‘: False}
driver.add_cookie(c1) # 添加2個值
driver.add_cookie(c2)
time.sleep(3) # 交流QQ群:232607095
# 重新整理下頁面就見證奇蹟了
driver.refresh()
有幾點需要注意:
1.登入時候要勾選下次自動登入按鈕。
2.add_cookie()只添加name和value,對於部落格園的登入是不成功。
3.本方法並不適合所有的網站,一般像部落格園這種記住登入狀態的才會適合。
學習過程中有遇到疑問的,可以加selenium(python+java) QQ群交流:232607095
另外成立了python介面自動化QQ群:226296743
Selenium2+python自動化41-繞過驗證碼(add_cookie)