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

    结果如下:

  • 相关阅读:
    javascript package的一种简单"优雅"实现
    高效、快速、专业的外科手术团队
    贝塞尔曲线
    经典格斗游戏《街头霸王》的Javascript实现
    该死的痘痘
    同步/异步与阻塞/非阻塞的区别
    Shell echo用法
    凹凸Linux面试题
    VMware Workstation 9下安装Fedora 18教程(转)
    Linux中locale 详解(转)
  • 原文地址:https://www.cnblogs.com/Lara1798/p/13328437.html
Copyright © 2020-2023  润新知