做UI自动化,某些场景我们需要使用JavaScript的localStorage.setItem()写入token的值。
格式为localStorage.setItem(key,value),value的类型为字符串。
但是如果这样写:
token = "eyJ0eXAiOiJKc29uV2ViVG9rZW4iLCJhbGciOiJIUzI1NiJ9" # 原token太长了,这里只截取部分作为举例,方便观看理解
print(token) # 方便观看理解,打印出来
js = 'window.localStorage.setItem("accounting-ui_TOKEN", "'+token+'")'
print(js)
self.web.driver.execute_script(js)
打印token和js出来你会发现:
这个token是不带双引号的,所以就会导致json格式报错:
而正常登录后,本地存储里的token值应该是这样的:
因此,我们需要传入的值为:
“eyJ0eXAiOiJKc29uV2ViVG9rZW4iLCJhbGciOiJIUzI1NiJ9”
才是正确的。
所以就需要添加转义字符:
token = "\"eyJ0eXAiOiJKc29uV2ViVG9rZW4iLCJhbGciOiJIUzI1NiJ9\""
print(token)
js = 'window.localStorage.setItem("accounting-ui_TOKEN", "'+token+'")'
print(js)
self.web.driver.execute_script(js)
看似没问题了,其实什么都没有写入:
因为,拼接之后为:
或者去掉代码中value参数拼接时的双引号:
token = "\"eyJ0eXAiOiJKc29uV2ViVG9rZW4iLCJhbGciOiJIUzI1NiJ9\""
print(token)
js = 'window.localStorage.setItem("accounting-ui_TOKEN", '+token+')' # 去掉双引号拼接
print(js)
self.web.driver.execute_script(js)
结果仍然不对:
这我TM就有点暴躁了😤。
但,如果尝试写入单引号,是可以成功的:
token = "'eyJ0eXAiOiJKc29uV2ViVG9rZW4iLCJhbGciOiJIUzI1NiJ9'"
js = 'window.localStorage.setItem("accounting-ui_TOKEN", "'+token+'")'
这就说明,肯定有某种方法也能将双引号写入。😟😦😮😃saw the dawn.
所以,我们需要把转义符原模原样的传入,也就是转义之后才为\"。
那么就需要分别转义\和":
token = "\\\"eyJ0eXAiOiJKc29uV2ViVG9rZW4iLCJhbGciOiJIUzI1NiJ9\\\""
print(token)
js = 'window.localStorage.setItem("accounting-ui_TOKEN", "'+token+'")'
print(js)
self.web.driver.execute_script(js)
如此,打印出来是这样的:
实际本地存储中是这样的:
😃就可以正确传入token了。
还有一种格式处理的方法是,将字符串放入列表中,再将其取出:
token = ['"eyJ0eXAiOiJKc29uV2ViVG9rZW4iLCJhbGciOiJIUzI1NiJ9"']
token = json.dumps(token[0])
print(token)
js = 'window.localStorage.setItem("accounting-ui_TOKEN", '+token+')'
print(js)
self.web.driver.execute_script(js)
打印出来和本地写入的也是我们想要的结果:
需要注意的是,从列表中取出来之后,使用json.dumps()将其转换为json字符串。
python没有前端json.stringify()的方法,这个方法会默认转换成带双引号的json字符串,可惜不能直接使用。
这种类似于“放进去再拿出来”的骚操作在python还有很多,某些情况下很管用,可能这也是让我喜欢python拒绝java的原因吧😄
例如,给一个列表去重:list(set(list)),利用集合的特性,把类型转过去再转回来。
说句题外话,之前搜遍全网也没有找到一个有用的回答,只在外网找到一个关于怎样去除双引号的求助帖。
关于这个问题,网上搜索结果全是互相抄的无用文章并打上[原创]的无耻之徒,可能只是为了增加访问量?😆
回到正题,这样做有什么用呢?在做自动化测试的时候,可以绕过登录页面直接登录系统,还可以避免花里胡哨的各种验证码。什么滑块,拼图,算数,变形模糊的数字字母,成语填空,选出哪些是什么物体…也不必费尽力气搞什么训练模型,因为你的目的仅仅是为了快捷登录并执行业务测试。当然,前提是你有正确的token。
至于token、cookie等几种常见的绕过登录进入系统的方法,自行搜索吧,比较简单,不做赘述。无耻之徒的文章很多,很轻易就能找到一篇😏