1. 程式人生 > 實用技巧 >介面自動化,sso單點登陸不支援通過介面返回token,其他請求又需要token。解決方式,使用UI自動化的selenium框架登陸獲取token

介面自動化,sso單點登陸不支援通過介面返回token,其他請求又需要token。解決方式,使用UI自動化的selenium框架登陸獲取token

找解決方案,找了好久,終於找到了, 其他部落格給了我思路

F12後切換到Application,然後看token是儲存在localStorage還是sessionStorage

實現程式碼:

LoginUrl,usename,password我都自己封裝在cfg.py檔案中了
import time
from selenium import  webdriver
from cfg import LoginUrl,usename,password
class GetToken():
    def __init__(self):
        self.driver=webdriver.Chrome()
    
def loginUI(self): self.driver.get(LoginUrl) self.driver.maximize_window() self.driver.implicitly_wait(10) # 登入輸入使用者名稱,密碼 self.driver.find_element_by_id('LoginForm_username').send_keys(usename) self.driver.find_element_by_id('LoginForm_password').send_keys(password) self.driver.find_element_by_id(
'loginSubmit').click() # 強制等待5秒,待session和token都成功返回並存到瀏覽器中 time.sleep(5) # 獲取token def get_token(self): # 是要從localStorage中獲取還是要從sessionStorage中獲取,具體看目標系統存到哪個中 # window.sessionStorage和直接寫sessionStorage是等效的 # 一定要使用return,不然獲取到的一直是None # get的Item不一定就叫token,得具體看目標系統把token存到哪個變數中
token = self.driver.execute_script('return localStorage.getItem("token");') # print('token:',token) return token #關閉瀏覽器 def close_browser(self): self.driver.quit() if __name__ == '__main__': gt = GetToken() gt.loginUI() ret_token=gt.get_token() print('獲取到的token:',ret_token) gt.close_browser()

結果如下: