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


前言

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

對於驗證碼,要么是讓開發在測試環境弄個萬能的驗證碼,如: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群交流:646645429

另外成立了python接口自動化QQ群:226296743

 selenium+python高級教程》已出書:selenium webdriver基於Python源碼案例

(購買此書送對應PDF版本)

 


免責聲明!

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



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