python使用Selenium和cookie繞過(guò)驗(yàn)證碼實(shí)現(xiàn)登錄示例代碼
利用selenium中獲取登陸過(guò)程所涉及的cookie信息:
方法 | 難易程度 |
通過(guò)抓包工具分析出cookie來(lái),然后將cookie添加到對(duì)應(yīng)的頁(yè)面中去 | 有技術(shù)要求,簡(jiǎn)單 |
先運(yùn)行一次通過(guò)驅(qū)動(dòng)器對(duì)象中的get_cookies方法獲取當(dāng)前項(xiàng)目的所有cookie | 麻,準(zhǔn)確性高 |
下面的實(shí)例主要以dsmall和crm系統(tǒng)為例。
第一種方式
http://192.168.141.100/index.php/home/login/login.html
首先抓取dsmall登陸的相關(guān)數(shù)據(jù)信息進(jìn)行分析,下面是dsmall的首頁(yè)需要輸入驗(yàn)證碼才能夠登陸成功

使用fiddler進(jìn)行抓取dsmall的登陸請(qǐng)求響應(yīng)數(shù)據(jù),具體分析得到下面結(jié)果:

并且具體還可以得知該cookie是基于session的狀態(tài)上存在的,也就是只要建立好會(huì)話,后期實(shí)際只要把cookie信息添加進(jìn)入,即可獲取到會(huì)話狀態(tài)了,所以具體實(shí)現(xiàn)代碼如下:
# cookieTest.py
# 使用cookie完成免登陸的操作
from selenium import webdriver
class DsmallCookie(object):
def __init__(self):
self.driver = webdriver.Chrome()
#與服務(wù)器建立連接
self.driver.get("http://192.168.141.100/index.php/home/member/index.html")
# 將cookie所對(duì)應(yīng)的值通過(guò)add_cookie()進(jìn)行添加
self.driver.add_cookie({"name": "PHPSESSID", "value": "ejgbevl453upavmjd42nr8bq9v"})
# 刷新頁(yè)面或重新發(fā)送一次請(qǐng)求都可以完成登陸操作
# 刷新頁(yè)面
self.driver.refresh()
# 重新發(fā)送一次請(qǐng)求
self.driver.get("http://192.168.141.100/index.php/home/member/index.html")
if __name__ == '__main__':
dsmall = DsmallCookie()注意:add_cookie中傳入的參數(shù)必須是字典對(duì)象,可以通過(guò)分析源代碼得知具體傳入的類型。
第二種方式
可以先使用selenium完成一次登陸操作,然后通過(guò)驅(qū)動(dòng)器調(diào)用get_cookies方法將獲取的cookie信息存儲(chǔ)到對(duì)應(yīng)的本地文件中,最后后續(xù)調(diào)用cookie信息即可。以CRM項(xiàng)目為實(shí)例。
# Get_Cookie.py
from selenium import webdriver
import json
class GetCookie(object):
def __init__(self):
self.driver=webdriver.Chrome()
self.driver.get("http://192.168.141.100/index.php/login")
def login(self):
self.driver.find_element_by_name("username").send_keys("admin")
self.driver.find_element_by_name("userpwd").send_keys("admin888")
self.driver.find_element_by_class_name("logindo").click()
def get_cookie(self):
with open("cookie.json",mode="w") as fp:
for value in self.driver.get_cookies():
json.dump(value,fp)
if __name__ == '__main__':
get=GetCookie()
#get.login()
#get.get_cookie()將登陸獲取到的cookie信息存儲(chǔ)到j(luò)son格式文件中。
然后不用輸入用戶名、密碼即可獲取登錄態(tài),
# Crm_NoLogin.py
#通過(guò)cookie完成登陸操作,直接調(diào)用已經(jīng)保存好的cookie文件中的cookie內(nèi)容
from selenium import webdriver
import json
class CrmNoLogin(object):
def __init__(self):
self.driver=webdriver.Chrome()
self.driver.get("http://123.57.71.195:7878/")
#將之前保存的cookie進(jìn)行添加到當(dāng)前的會(huì)話中
self.driver.add_cookie(self.read_cookie())
#添加完后,則再次訪問(wèn)獲取此url地址的話則可以直接處于登陸狀態(tài),此處注意,訪問(wèn)的url必須是登陸成功后的url地址
self.driver.get("http://123.57.71.195:7878/")
#聲明讀cookie的方法
def read_cookie(self):
with open("cookie.json") as fp:
return json.load(fp)
if __name__ == '__main__':
crm=CrmNoLogin()注意:此處的crm項(xiàng)目并不是基于session會(huì)話鏈接的,所以第二次發(fā)送請(qǐng)求時(shí)不能夠刷新操作,否則無(wú)法處于登陸態(tài),必須重新發(fā)送一次登陸成功后的請(qǐng)求才能夠處于登陸狀態(tài)。這里就需要大家注意:刷新和重新發(fā)送請(qǐng)求的區(qū)別了。
總結(jié)
實(shí)踐:大家可以通過(guò)以上方法完成OA項(xiàng)目的免登陸操作哦,OA項(xiàng)目的訪問(wèn)地址:http://123.57.71.195:9999/login.html,這是我給大家部署在阿里云上的項(xiàng)目,可以練習(xí)練習(xí)下哦~~
說(shuō)明:
1.如果第一次訪問(wèn)獲取的cookie存在多個(gè)字典的形式的話,則每個(gè)字典都需要保存到cookie文件中,然后進(jìn)行讀取的時(shí)候需要遍歷每個(gè)字典,并使用add_cookie將每個(gè)字典進(jìn)行添加對(duì)應(yīng)的cookie信息
2.refresh和重新發(fā)送請(qǐng)求的區(qū)別:刷新就是基于現(xiàn)有的頁(yè)面基礎(chǔ)上進(jìn)行檢查當(dāng)前頁(yè)面是否存更新的內(nèi)容;地址欄中的回車又分兩種情況:一種就是請(qǐng)求的url在瀏覽器中的緩存未過(guò)期;另一種就是已過(guò)期;建議后期如果是使用cookie完成免登陸狀態(tài)的話,大家如果不懂什么時(shí)候使用refresh的話,則全部實(shí)用重新發(fā)送請(qǐng)求;
到此這篇關(guān)于python使用cookie繞過(guò)驗(yàn)證碼實(shí)現(xiàn)登錄示例代碼的文章就介紹到這了,更多相關(guān)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python包實(shí)現(xiàn)?retrying?重復(fù)回調(diào)操作
這篇文章主要介紹了python包實(shí)現(xiàn)?retrying?重復(fù)回調(diào)操作,文章python的相關(guān)資料展開(kāi)對(duì)retrying?重復(fù)回調(diào)的詳細(xì)介紹,需要的小伙伴可以參考一下,希望對(duì)你的學(xué)習(xí)有所幫助2022-04-04
python中dropna()函數(shù)的作用舉例說(shuō)明
這篇文章主要給大家介紹了關(guān)于python中dropna()函數(shù)的相關(guān)資料,dropna()是pandas庫(kù)中的一個(gè)函數(shù),用于刪除DataFrame中的缺失值,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-11-11
詳解Python3.6安裝psutil模塊和功能簡(jiǎn)介
這篇文章主要介紹了詳解Python3.6安裝psutil模塊和功能簡(jiǎn)介,詳細(xì)的介紹了安裝psutil模塊和該模塊的使用,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-05-05
python sklearn包——混淆矩陣、分類報(bào)告等自動(dòng)生成方式
今天小編就為大家分享一篇python sklearn包——混淆矩陣、分類報(bào)告等自動(dòng)生成方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-02-02
Python json 模塊核心用法之字典 / 列表與 JSON&nb
在Python開(kāi)發(fā)中,我們經(jīng)常會(huì)遇到Python內(nèi)置數(shù)據(jù)類型(字典、列表)和JSON字符串的相互轉(zhuǎn)換需求,本文會(huì)通過(guò)實(shí)際代碼案例,詳細(xì)講解json模塊的兩個(gè)核心方法,感興趣的朋友跟隨小編一起看看吧2026-02-02
Python實(shí)現(xiàn)PDF轉(zhuǎn)Word的方法詳解
由于PDF的文件大多都是只讀文件,有時(shí)候?yàn)榱藵M足可以編輯的需要通??梢詫DF文件直接轉(zhuǎn)換成Word文件進(jìn)行操作。本文為大家整理了一些實(shí)現(xiàn)方法,希望對(duì)大家有所幫助2023-02-02

