zoukankan      html  css  js  c++  java
  • 接口自动化,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()

    结果如下:

  • 相关阅读:
    completable 用法
    spring 纯注解方式 与AOP
    springIOC原理加载过程
    多线程手写Future模式
    springMVC 实现redis分布式锁
    java线程池学习
    本地跑 spark ui 报错
    九度oj 题目1452:搬寝室
    九度oj 题目1456:胜利大逃亡
    九度oj 题目1455:珍惜现在,感恩生活
  • 原文地址:https://www.cnblogs.com/Lara1798/p/13328437.html
Copyright © 2011-2022 走看看