python使用localStorage.setItem()写入本地存储转义符的问题

做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等几种常见的绕过登录进入系统的方法,自行搜索吧,比较简单,不做赘述。无耻之徒的文章很多,很轻易就能找到一篇😏

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值