1. 程式人生 > >Selenium2+python自動化41-繞過驗證碼(add_cookie)

Selenium2+python自動化41-繞過驗證碼(add_cookie)

option html exp 需要 輸入 操作 true .cn selenium

前言

驗證碼這種問題是比較頭疼的,對於驗證碼的處理,不要去想破解方法,這個驗證碼本來就是為了防止別人自動化登錄的。如果你能破解,說明你們公司的驗證碼嗎安全級別不高,那就需要提高級別了。

對於驗證碼,要麽是讓開發在測試環境弄個萬能的驗證碼,如: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)
# 刷新下頁面就見證奇跡了
driver.refresh()

有幾點需要註意:

1.登錄時候要勾選下次自動登錄按鈕。

2.add_cookie()只添加name和value,對於博客園的登錄是不成功。

3.本方法並不適合所有的網站,一般像博客園這種記住登錄狀態的才會適合

Selenium2+python自動化41-繞過驗證碼(add_cookie)