Web自動化之Selenium添加網站Cookies實現免登錄

????????在使用Selenium進行Web自動化時,添加網站Cookies是實現免登錄的一種高效方法。通過模擬瀏覽器行為,我們可以將已登錄狀態的Cookies存儲起來,并在下次自動化測試或爬蟲任務中直接加載這些Cookies,從而跳過登錄步驟。

Cookies簡介

????????Cookies是存儲在用戶本地終端上的一小塊數據,它會在瀏覽器向服務器發起請求時被攜帶并發送到服務器上。這些Cookies通常包含了用戶的會話信息,比如登錄狀態、用戶偏好設置等。簡而言之,Cookie就像是臨時身份證一樣,每次瀏覽器請求時都會攜帶它,以便服務器識別用戶身份或保持會話狀態,這也是為什么我們在一個網頁內登錄后關閉掉網頁,再次進入依然能夠保持登錄狀態的原因。

????????不過,為了安全起見,網站開發者通常會對Cookies設置過期時間,并且在過期后會被瀏覽器自動刪除。此外,Cookies的存儲位置也有限制,通常只能在設置它們的域名下訪問,這在一定程度上保護了用戶的隱私安全。

這里以CSDN為例

????????打開瀏覽器開發者工具,查看當前html的cookie信息,Expire一欄是cookie過期時間,會話一般表示關閉網頁后這個cookie就過期。

selenium中針對cookie的操作

????????在selenium中,有以下幾個方法用來管理和操作當前網頁內的cookie:

這里假設我們已經設定好一個webdriver對象名為browser

獲取當前網頁內的cookie

cookies=browser.get_cookies()
#cookies是List[dict],[{},{},{}]的格式

添加cookie至當前網頁

browser.add_cookie('cookie字典')

刪除單個cookie

browser.delete_cookie('cookie名稱')

刪除所有cookie

browser.delete_all_cookies()

通過cookie實現免登錄

步驟

? ? ? ? 由于沒有用戶數據,webdriver每次打開一個網頁都相當于新啟動一個瀏覽器打開該網頁

????????因此,在一些需要登錄的網站,我們可以先試用webdriver打開該網頁,接著手動掃碼登錄后,使用get_all_cookies()方法將登錄后網頁的cookies先保存到本地,建議使用json。

????????然后下一次使用webdriver打開該網站時,再使用add_cookie()方法把先前的登錄后的cookie數據添加到webdriver中,接著刷新頁面,網站便會順間恢復到已登錄的狀態。

源代碼

???????這里以Edge為例,其余瀏覽器方法一樣,將webdriver類型更換即可。

???獲取登錄后的網頁cookies


import json
import time
from selenium.webdriver.edge.options import Options
from selenium import webdriver
edge_options=Options()
edge_options.add_argument('--disable-blink-features=AutomationControlled')
browser=webdriver.Edge(options=edge_options)
browser.get('URL')#請將URL替換為你要登錄的網站的URL 
browser.maximize_window()  
time.sleep(20)#等待20秒,這20秒用來手動登錄,若時間不夠,請自行調整
cookies=browser.get_cookies()
with open('cookies.json','w') as f:f.write(json.dumps(cookies))#將cookies保存到本地cookies.json文件中
browser.quit() 

將保存到本地的cookie數據添加到webdriver中

import json
from selenium.webdriver.edge.options import Options
from selenium import webdriver
edge_options=Options()
edge_options.add_argument('--disable-blink-features=AutomationControlled')
browser=webdriver.Edge(options=edge_options)
browser.get('URL')#請將URL替換為你要登錄的網站的URL 
browser.maximize_window()                    
with open('cookies.json','r') as f:cookies=json.loads(f.read())for cookie in cookies:cookie_dict = {'domain': cookie.get('domain'),'name': cookie.get('name'),'value': cookie.get('value'),"expires": '','path': '/','httpOnly': False,'HostOnly': False,'Secure': False}browser.add_cookie(cookie_dict)browser.refresh()  
#執行后續操作

效果

webdriver剛啟動打開csdn主頁?

添加cookie并刷新頁面后?

????????經驗證,csdn網頁端的cookie有效時長超過24小時,負責維護登錄狀態的cookie可能UserToken,Username,Userinfo等cookie,這幾個cookie的有效時長都超過24小時。

說明?

????????不同網站的cookie有效時長各不相同,為了安全起見,很多都是會話,因此保存在本地的cookie數據也需要定時更新,對此,你可以在瀏覽器的開發者工具中查看cookie的expire時間來決定更新的頻率。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/70955.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/70955.shtml
英文地址,請注明出處:http://en.pswp.cn/web/70955.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

NAT 技術:網絡中的 “地址魔術師”

目錄 一、性能瓶頸:NAT 的 “阿喀琉斯之踵” (一)數據包處理延遲 (二)高并發下的性能損耗 二、應用兼容性:NAT 帶來的 “適配難題” (一)端到端通信的困境 (二&…

php序列化與反序列化

文章目錄 基礎知識魔術方法:在序列化和反序列化過程中自動調用的方法什么是 __destruct() 方法?何時觸發 __destruct() 方法?用途:語法示例: 反序列化漏洞利用前提條件一些繞過策略繞過__wakeup函數繞過正則匹配繞過相…

docker 占用系統空間太大了,整體遷移到掛載的其他磁盤|【當前普通用戶使用docker時,無法指定鏡像、容器安裝位置【無法指定】】

文章目錄 前言【核心步驟皆為 大模型生成的方案】總結步驟應該是:詳細步驟如下1. **停止 Docker 服務**2. **備份原數據(防止遷移失敗)**3. **遷移數據到新磁盤**4. **修改 Docker 配置文件**5. **重啟 Docker 服務**6. **驗證容器和鏡像**7.…

設計后端返回給前端的返回體

目錄 1、為什么要設計返回體? 2、返回體包含哪些內容(如何設計)? 舉例 3、總結 1、為什么要設計返回體? 在設計后端返回給前端的返回體時,通常需要遵循一定的規范,以確保前后端交互的清晰性…

Springboot 自動化裝配的原理

Springboot 自動化裝配的原理 SpringBoot 主要作用為:起步依賴、自動裝配。而為了實現這種功能,SpringBoot 底層主要使用了 SpringBootApplication 注解。 首先,SpringBootApplication 是一個復合注解,它結合了 Configuration、…

基于vue框架的游戲博客網站設計iw282(程序+源碼+數據庫+調試部署+開發環境)帶論文文檔1萬字以上,文末可獲取,系統界面在最后面。

系統程序文件列表 項目功能:用戶,博客信息,資源共享,游戲視頻,游戲照片 開題報告內容 基于FlaskVue框架的游戲博客網站設計開題報告 一、項目背景與意義 隨著互聯網技術的飛速發展和游戲產業的不斷壯大,游戲玩家對游戲資訊、攻略、評測等內容的需求日…

算法-二叉樹篇13-路徑總和

路徑總和 力扣題目鏈接 題目描述 給你二叉樹的根節點 root 和一個表示目標和的整數 targetSum 。判斷該樹中是否存在 根節點到葉子節點 的路徑,這條路徑上所有節點值相加等于目標和 targetSum 。如果存在,返回 true ;否則,返回…

8. 示例:對32位數據總線實現位寬和值域覆蓋

文章目錄 前言示例一:示例二:示例三:仿真與覆蓋率分析覆蓋點詳細說明覆蓋率提升技巧常見錯誤排查 示例四:仿真步驟 前言 針對32位數據總線實現位寬和值域的覆蓋,并且能夠用xrun運行,查看日志和波形。cover…

TDengine 中的數據庫

數據庫概念 時序數據庫 TDengine 中數據庫概念,等同于關系型數據庫 MYSQL PostgreSQL 中的數據庫,都是對資源進行分割管理的單位。 TDengine 數據庫與關系型數據庫最大區別是跨庫操作,TDengine 數據庫跨庫操作除了少量幾個SQL 能支持外&…

開源電商項目、物聯網項目、銷售系統項目和社區團購項目

以下是推薦的開源電商項目、物聯網項目、銷售系統項目和社區團購項目,均使用Java開發,且無需付費,GitHub地址如下: ### 開源電商項目 1. **mall** GitHub地址:[https://github.com/macrozheng/mall](https://git…

如何設計一個短鏈系統?

短鏈系統設計的關鍵要點: 系統功能實現 短鏈生成:接收長鏈接,先檢查是否已有對應短鏈,存在則直接返回。否則,使用分布式 ID 生成器(如號段模式、SnowFlake 算法、數據庫自增 ID、Redis 自增等)生成唯一 ID,或通過哈希算法(如 MurmurHash)處理長鏈接得到哈希值。再將生…

數據結構(初階)(三)----單鏈表

單鏈表 概念 概念:鏈表是?種物理存儲結構上?連續、?順序的存儲結構,數據元素的邏輯順序是通過鏈表中的指針鏈接次序實現的。 結點 與順序表不同的是,鏈表的結構類似于帶車頭的火車車廂,,鏈表的每個車廂都是獨立…

游戲引擎學習第129天

倉庫:https://gitee.com/mrxiao_com/2d_game_3 小妙招: vscode:定位錯誤行 一頓狂按F8 重構快捷鍵:F2 重構相關的變量 回顧并為今天的內容做準備 今天的工作主要集中在渲染器的改進上,渲染器現在運行得相當不錯,得益于一些優化和組織上的改進。我們計…

文字描邊實現內黃外綠效果

網頁使用 <!DOCTYPE html> <html> <head> <style> .text-effect {color: #ffd700; /* 黃色文字 */-webkit-text-stroke: 2px #008000; /* 綠色描邊&#xff08;兼容Webkit內核&#xff09; */text-stroke: 2px #008000; /* 標準語法 *…

yolov8 目標追蹤 (源碼 +效果圖)

1.在代碼中 增加了s鍵開始追蹤 e鍵結束追蹤 顯示移動距離(代碼中可調標尺和像素的比值 以便接近實際距離) 2.繪制了監測區域 只在區域內的檢測 3.規定了檢測的類別 只有人類才繪制軌跡 import osimport cv2 from ultralytics import YOLO from collections import defaultdic…

2.5 運算符2

版權聲明&#xff1a;本文為博主原創文章&#xff0c;轉載請在顯著位置標明本文出處以及作者網名&#xff0c;未經作者允許不得用于商業目的 2.5.3 賦值運算符 賦值運算符將值存儲在左操作數指定的對象中。有兩種賦值操作&#xff1a; 1、簡單賦值&#xff0c;使用。其中第二…

地彈與振鈴

地彈&#xff08;Ground Bounce&#xff09;和振鈴&#xff08;Ringing&#xff09;是數字電路中常見的信號完整性問題&#xff0c;兩者都與高速開關和寄生參數有關&#xff0c;但表現形式和成因不同。以下是它們的對比及解決方法&#xff1a; 1. 地彈&#xff08;Ground Bounc…

解決Deepseek“服務器繁忙,請稍后再試”問題,基于硅基流動和chatbox的解決方案

文章目錄 前言操作步驟步驟1&#xff1a;注冊賬號步驟2&#xff1a;在線體驗步驟3&#xff1a;獲取API密鑰步驟4&#xff1a;安裝chatbox步驟5&#xff1a;chatbox設置 價格方面 前言 最近在使用DeepSeek時&#xff0c;開啟深度思考功能后&#xff0c;頻繁遇到“服務器繁忙&am…

二十三種設計模式

2 工廠方法模式 工廠模式&#xff08;Factory Pattern&#xff09;是 Java 中最常用的設計模式之一。這種類型的設計模式屬于創建型模式&#xff0c;它提供了一種創建對象的最佳方式。 在工廠模式中&#xff0c;我們在創建對象時不會對客戶端暴露創建邏輯&#xff0c;并且是通…

基于C語言對CAPL語法基礎的理解

.CAPL是基于C語言開發的&#xff0c;專門用于CANalyzer和CANoe工具環境&#xff0c;但是CAPL簡化了C語言&#xff0c;移除了復雜的指針概念&#xff0c;和一些不常用的關鍵字。 2.CAPL 腳本是基于事件驅動的&#xff0c;任何事件都有可能觸發CAPL腳本的執行&#xff0c;比如&a…