使用selenium绕过接口自动化登录时的动态密码

前提摘要:

在做接口自动化的过程中,有时候会遇到登录的密码为动态的(同一个账号密码登录时,通过fiddler抓取的密文密码均不一样)。

如果有条件的,可以跟后端开发沟通,找到密码加密规则,按照规则去一步一步做即可。

如果有其他原因无法通过上面方法实现的,可以通过以下方法来绕过动态密码获取token,做后续的api测试:

步骤1:通过selenium来使自己的账号登录你需要的网站。如:

 步骤2:手动打开chrome浏览器的开发者视图(F12)

注意:这里要看你的token信息是在Local Storage中还是在Session Storage中(我这里是在local storage中)

 

步骤3: 获取登录后的token信息

# 获取登录后localStorage中的api信息
    localStr = driver.execute_script('return localStorage.getItem("token");')
    # 引号里面要注意使用return,不然localStr返回为空  
    # 这里的token是在localStorage中的Key

 最终代码如下:

from selenium import webdriver
from time import sleep
from selenium.webdriver.chrome.options import Options
import pprint
import re

#  浏览器设置(因为是在做接口自动化,所以这里选择不让浏览器自动弹出界面执行。)
chrome_opt = Options()
chrome_opt.add_argument('--headless')


driver = webdriver.Chrome(chrome_options=chrome_opt)
driver.get('http://url.com/')
driver.maximize_window()

def getToken():

    # 登录
    driver.find_element_by_id("usertext").send_keys("test001")
    sleep(1)
    driver.find_element_by_id("passwordtext").send_keys("123456")
    sleep(1)
    driver.find_element_by_id("Button").click()
    sleep(2)

    # 获取登录后localStorage中的api信息
    localStr = driver.execute_script('return localStorage.getItem("token");')  
    # 引号里面要注意使用return,不然localStr返回为空  
    # 这里的token是在localStorage中的Key

    # 注:我这里的项目因为不是直接是token键对应token的值,是某个键的值中,包含了token信息,所以我这里要进行截取
    # 获取token(如果获取不到token,将在while中循环获取,直到获取到token值即可)
    token = []
    while token == []:
        token = re.findall('token":"(.*?)",', localStr)

    # 关闭浏览器
    # driver.close()
    return token

if __name__ == '__main__':
    token = getToken()
    print("最终的token为",token)

执行结果:

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值