最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python3使用Selenium獲取session和token方法詳解

 更新時間:2021年02月16日 16:17:04   作者:諸子流  
這篇文章主要介紹了Python3使用Selenium獲取session和token方法詳解,需要的朋友可以參考下

一、背景說明

之前寫了一款簡單的api模糊測試工具,之前系統(tǒng)可以使用http Base認(rèn)證現(xiàn)在改成session形式并加上了token。

最簡單的改造方法,是自己先在瀏覽器手動登錄,然后提取出session和token(系統(tǒng)token在整個會話期間可重復(fù)使用)填到模糊測試工具中即可。但這種非全自動化的方式不到萬不得已不想用。

最直接的方法,最使用requests按登錄流程依次發(fā)包登錄即可。但其中的難點(diǎn)是密碼是加密提交的,詢問開發(fā)人員說是DES加密;DES加密不難,但是用不同的語言編寫的加密算法與別人的結(jié)果完全一致那就比較費(fèi)工夫。

最后的方法,那就是使用selenium登錄避開密碼的構(gòu)造,這種方法的關(guān)鍵點(diǎn)在于:selenium是基于圖形界面操作的,沒有直接的辦法能獲取request和response的數(shù)據(jù)包,在這種情況下如何獲取session和token。

自己動web前端的存儲并沒有很深入了解,一直想的是如何獲取selenium request和response的數(shù)據(jù)包從中提取session和token,直到看到這篇文章才想起前端的變量(尤其是restful中的全局變量)會放存localStorage和sessionStorage中,從中提取session和token即可。

二、環(huán)境搭建

2.1 下載驅(qū)動

下載驅(qū)動文件,放到后續(xù)python文件同級目錄下或加入到環(huán)境變量中即可。其中Chrome驅(qū)動要注意Driver版本與瀏覽器版本對應(yīng)要求。

Firefox驅(qū)動下載地址:https://github.com/mozilla/geckodriver/releases

Chrome驅(qū)動下載地址:http://chromedriver.chromium.org/downloads

Safari驅(qū)動下載地址:https://webkit.org/blog/6900/webdriver-support-in-safari-10/

Edge驅(qū)動下載地址:https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/

2.2 安裝selenium

pip install selenium

三、程序?qū)崿F(xiàn)

3.1 系統(tǒng)狀況

手動登錄系統(tǒng)后,查看存儲狀況如下圖所示,sessionid和token分別存儲在sessionStorage的sessionId和token兩個變量中

3.2 實(shí)現(xiàn)代碼

import json
import time
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

class GetSessionAndToken():
  def __init__(self):
    # 啟用無頭模式,可選
    browser_options = webdriver.FirefoxOptions()
    browser_options.add_argument('--headless')
    browser_options.add_argument('--disable-gpu')
    self.browser = webdriver.Firefox(firefox_options=browser_options)
    # self.browser = webdriver.Chrome()

  # 登錄系統(tǒng),具體到自己系統(tǒng)時需要自行修改
  def login_system(self):
    # 登錄用戶名密碼,改成目標(biāo)系統(tǒng)用戶名密碼
    username = "admin"
    password = "123456"
    # 登錄頁面url,改成目標(biāo)系統(tǒng)登錄頁面
    url = "https://10.10.6.93/#login"
    self.browser.get(url)
    # 顯性等待,直到用戶名控件加載出來才進(jìn)行下一步
    WebDriverWait(self.browser,20,0.5).until(EC.presence_of_element_located((By.ID,"txtUserName")))
    # 填寫用戶名
    self.browser.find_element_by_id("txtUserName").send_keys(username)
    # 填寫密碼
    self.browser.find_element_by_id("txtPassword").send_keys(password)
    # 點(diǎn)擊登錄
    self.browser.find_element_by_id("btnLogin").click()
    # 強(qiáng)制等待5秒,待session和token都成功返回并存到瀏覽器中
    # restful隱性等待不太好用?self.browser.implicitly_wait(5)
    time.sleep(5)

  # 獲取sessionid
  def get_sessionid(self):
    # 是要從localStorage中獲取還是要從sessionStorage中獲取,具體看目標(biāo)系統(tǒng)存到哪個中
    # window.sessionStorage和直接寫sessionStorage是等效的
    # 一定要使用return,不然獲取到的一直是None
    # get的Item不一定就叫sessionId,得具體看目標(biāo)系統(tǒng)把sessionid存到哪個變量中
    sessionid = self.browser.execute_script('return sessionStorage.getItem("sessionId");')

    # 另外sessionid一般都直接通過返回Set-Cookies頭設(shè)置到Cookie中,所以也可以從Cookie讀取
    # 獲取瀏覽器所有Set-Cookie,返回對象是字典列表
    # cookies = self.browser.get_cookies()
    # 獲取單項Cookie,是不是叫sessionId取決于系統(tǒng)存成什么變量,單項Cookie是字典
    # cookie = self.browser.get_cookie("sessionId")
    # cookie = cookie["value"]
    # print(f"{cookies}")
    return sessionid

  # 獲取token
  def get_token(self):
    # 是要從localStorage中獲取還是要從sessionStorage中獲取,具體看目標(biāo)系統(tǒng)存到哪個中
    # window.sessionStorage和直接寫sessionStorage是等效的
    # 一定要使用return,不然獲取到的一直是None
    # get的Item不一定就叫token,得具體看目標(biāo)系統(tǒng)把token存到哪個變量中
    token = self.browser.execute_script('return sessionStorage.getItem("token");')
    # print(f"{token}")
    return token

  def __del__(self):
    # 退出程序時關(guān)閉瀏覽器
    self.browser.close()

if __name__ == "__main__":
  obj = GetSessionAndToken()
  obj.login_system()
  sessionid = obj.get_sessionid()
  token = obj.get_token()
  print(f"sessionid為: {sessionid}\n"
     f"token為:   {token}")

3.3 實(shí)現(xiàn)效果

更多關(guān)于Python獲取session和token方法請查看下面的相關(guān)鏈接

相關(guān)文章

  • scrapy在python爬蟲中搭建出錯的解決方法

    scrapy在python爬蟲中搭建出錯的解決方法

    在本篇文章里小編給大家整理了一篇關(guān)于scrapy在python爬蟲中搭建出錯的解決方法,有需要的朋友們可以學(xué)習(xí)參考下。
    2020-11-11
  • Python爬蟲實(shí)現(xiàn)爬取京東手機(jī)頁面的圖片(實(shí)例代碼)

    Python爬蟲實(shí)現(xiàn)爬取京東手機(jī)頁面的圖片(實(shí)例代碼)

    下面小編就為大家分享一篇Python爬蟲實(shí)現(xiàn)爬取京東手機(jī)頁面的圖片實(shí)例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2017-11-11
  • 詳解Python中RegEx在數(shù)據(jù)處理中的應(yīng)用

    詳解Python中RegEx在數(shù)據(jù)處理中的應(yīng)用

    正則表達(dá)式(Regular?Expressions,簡稱?RegEx)是一種強(qiáng)大的文本匹配和搜索工具,它在數(shù)據(jù)處理、文本解析和字符串操作中發(fā)揮著關(guān)鍵作用,下面就跟隨小編一起來了解一下RegEx的具體使用吧
    2024-01-01
  • Python灰度變換中灰度切割分析實(shí)現(xiàn)

    Python灰度變換中灰度切割分析實(shí)現(xiàn)

    灰度變換是指根據(jù)某種目標(biāo)條件按一定變換關(guān)系逐點(diǎn)改變源圖像中每個像素灰度值的方法。目的是改善畫質(zhì),使圖像顯示效果更加清晰。圖像的灰度變換處理是圖像增強(qiáng)處理技術(shù)中的一種非常基礎(chǔ)、直接的空間域圖像處理方法,也是圖像數(shù)字化軟件和圖像顯示軟件的一個重要組成部分
    2022-10-10
  • 通過mod_python配置運(yùn)行在Apache上的Django框架

    通過mod_python配置運(yùn)行在Apache上的Django框架

    這篇文章主要介紹了通過mod_python配置運(yùn)行在Apache上的Django框架,Django是最具人氣的Python web開發(fā)框架,需要的朋友可以參考下
    2015-07-07
  • python包管理工具pip全面解析

    python包管理工具pip全面解析

    這篇文章主要為大家介紹了python包管理工具pip的全面解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12
  • python寫的一個squid訪問日志分析的小程序

    python寫的一個squid訪問日志分析的小程序

    這篇文章主要介紹了python寫的一個分析squid訪問日志的小程序,本文實(shí)現(xiàn)的目標(biāo)是統(tǒng)計access.log中的ip數(shù)目,需要的朋友可以參考下
    2014-09-09
  • python的paramiko模塊實(shí)現(xiàn)遠(yuǎn)程控制和傳輸示例

    python的paramiko模塊實(shí)現(xiàn)遠(yuǎn)程控制和傳輸示例

    本篇文章主要介紹了python的paramiko模塊實(shí)現(xiàn)遠(yuǎn)程控制和傳輸示例,非常具有實(shí)用價值,需要的朋友可以參考下
    2017-10-10
  • python?snap7讀寫PLC的操作方法

    python?snap7讀寫PLC的操作方法

    這篇文章主要介紹了python?snap7讀寫PLC的操作方法,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-02-02
  • Python學(xué)習(xí)教程之常用的內(nèi)置函數(shù)大全

    Python學(xué)習(xí)教程之常用的內(nèi)置函數(shù)大全

    python給我們提供了很多已經(jīng)定義好的函數(shù),下面這篇文章主要給大家介紹了關(guān)于Python學(xué)習(xí)教程之一些常用的內(nèi)置函數(shù),文中分享了關(guān)于數(shù)學(xué)函數(shù)、功能函數(shù)、類型轉(zhuǎn)換函數(shù)、字符串處理和序列處理函數(shù)的相關(guān)資料,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-07-07

最新評論

文山县| 昌黎县| 桦南县| 南京市| 江永县| 贵阳市| 永昌县| 井陉县| 微博| 南和县| 常德市| 宁陕县| 桦川县| 罗田县| 延川县| 吉木萨尔县| 收藏| 聂拉木县| 高台县| 东丰县| 历史| 东源县| 上高县| 平谷区| 旬邑县| 柳江县| 江西省| 永嘉县| 萝北县| 陵川县| 揭东县| 乌审旗| 泸州市| 昆山市| 会东县| 灯塔市| 大渡口区| 松滋市| 南宫市| 仁布县| 株洲市|