接口自动化,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()

结果如下:

 

posted @ 2020-07-17 10:34  胡七七  阅读(1086)  评论(0编辑  收藏  举报