两个方法:

1、常用的方法: 第一种方法是登录后查看网站的 cookie,请求 url 的时候把 cookie 带上(缺点是:cookie有时间限制。优点:简单,方便)

2、添加cookies的方式:思路是:先对比登录前和登录后的cookies区别,查看登录后cookies里那些值是多出来的,然后通过添加cookies的方式,将值添加进去;这样就可以达到跳过登录的效果。(缺点:逻辑性比较复杂,代码量多。优点:可以保证每次cookies都是有效的)

 具体操作步骤:

  1、通过抓包工具,分享登录前与登录后的cookies信息

  

  2、通过不同的方式,需要添加到cookies里的值(重点:怎么去动态获取这些值)

class DictJson:
@staticmethod
def case_ins_dict_json(username, password):
# CaseInsensitiveDict 也是一种字典抽象类。转字典
# 获取时间
h_data = UserLogin().pc_user_login(username=username, password=password)[0]
headers_data = dict(h_data)
set_cookie = headers_data['Set-Cookie']
c = set_cookie.split(';')[2]
expires = c.split('=')[1]
ans_time = int(time.mktime(time.strptime(expires, '%a, %d-%b-%Y %H:%M:%S %Z'))) # 获取user_ticket
c_data = UserLogin().pc_user_login(username=username, password=password)[1]
a = dict(c_data)['cookies']
user_ticket = a.split('\"')[11]
return ans_time, user_ticket

  

CaseInsensitiveDict:

可知,CaseInsensitiveDict是从MutableMapping派生的,即其父类是MutableMapping,中文名叫“可变映射”,那么这个MutableMapping到底是何方神圣?

从Python3的官方文档中可以找到它,具体在 8.4. collections.abc — Abstract Base Classes for Containers中可以找到它的定义

| ABC | Inherits from | Abstract Methods | Mixin Methods | | -------------- | ------------- | -------------------------------------------------------- | ------------------------------------------------------------ | | MutableMapping | Mapping | getitem, setitem, delitem, iter, len | Inherited Mapping methods and pop, popitem, clear, update, and setdefault |

我们可以简单的认为,这是一个字典抽象类,你只要自己实现了其中的getitem, setitem, delitem, iter, len方法即可实现一个自己的字典,而CaseInsensitiveDict正是基于此构造了自己的数据结构。

split():   Python split() 通过指定分隔符对字符串进行切片,如果参数 num 有指定值,则分隔 num+1 个子字符串 ---------https://www.runoob.com/python/att-string-split.html

time.strptime() : Python time strptime() 函数根据指定的格式把一个时间字符串解析为时间元组。------------------https://www.runoob.com/python/att-time-strptime.html

  3、将获取到的值,添加到cookies里

class GetLogin:
def __init__(self, driver):
self.dr = driver
# 读取url def cookie_login(self, url, username, password):
"""带cookie登录绕过验证码"""
# 获取user_ticket
user_ticket = DictJson().case_ins_dict_json(username=username, password=password)[1]
# 获取时间戳
expiry_time = DictJson().case_ins_dict_json(username=username, password=password)[0]
time.sleep(2)
# 打开浏览器
GetBrowser(driver=self.dr).open_browser(url=url) # 添加cookie
c_ticket = {
'domain': '.veryeast.cn',
'expiry': expiry_time,
'httpOnly': False,
'path': '/',
'secure': False,
'name': 'ticket',
'value': user_ticket
}
c_name = {
'domain': '.veryeast.cn',
'expiry': expiry_time,
'httpOnly': False,
'path': '/',
'secure': False,
'name': 'username',
'value': username
}
c_user_type = {
'domain': '.veryeast.cn',
'expiry': expiry_time,
'httpOnly': False,
'path': '/',
'secure': False,
'name': 'user_type',
'value': '2'
} GetBrowser(driver=self.dr).add_cookies(cookie=c_ticket)
GetBrowser(driver=self.dr).add_cookies(cookie=c_name)
GetBrowser(driver=self.dr).add_cookies(cookie=c_user_type) # 等待3S
time.sleep(3)
# 刷新页面
GetBrowser(driver=self.dr).refresh_browser()

  4、刷新页面,即可实现登录

  

web自动化-绕过登录的更多相关文章

  1. Web自动化---解决登录页面随机验证码问题

    一.抛出问题 在日常的测试工作中,遇到了这样一个登录页面,如下图: 像我们之前做过UI自动化的同学就知道,自动输入账号和密码,这个简单,但是怎么样来识别验证码呢?验证码的形式有多种,有纯数字的,纯字母 ...

  2. 【Python web自动化】之读取配置文件参数,利用cookie返回值进行跳过验证码进行登录操作

    当进行Python的Web自动化时,会涉及到验证码问题,该如何跳过执行呢,下面请看代码: 1.首先新建配置文件*.ini格式 config.ini [db] #基础地址: baseurl = http ...

  3. python+pytest接口自动化(9)-cookie绕过登录(保持登录状态)

    在编写接口自动化测试用例或其他脚本的过程中,经常会遇到需要绕过用户名/密码或验证码登录,去请求接口的情况,一是因为有时验证码会比较复杂,比如有些图形验证码,难以通过接口的方式去处理:再者,每次请求接口 ...

  4. python之web自动化验证码识别解决方案

    验证码识别解决方案 对于web应用程序来讲,处于安全性考虑,在登录的时候,都会设置验证码,验证码的类型种类繁多,有图片中辨别数字字母的,有点击图片中指定的文字的,也有算术计算结果的,再复杂一点就是滑动 ...

  5. Selenium Web 自动化 - 项目实战(三)

    Selenium Web 自动化 - 项目实战(三) 2016-08-10 目录 1 关键字驱动概述2 框架更改总览3 框架更改详解  3.1 解析新增页面目录  3.2 解析新增测试用例目录  3. ...

  6. Selenium WebDriver对cookie进行处理绕过登录验证码

    现在几乎所有登录页面都会带一个验证码,做起自动化这块比较麻烦, 所以要绕过网站的验证码. 首先需要手动登录一次你的测试网站,去chrome的F12里获取这个网站的cookie信息,找到对应的保存登录信 ...

  7. Web自动化框架之五一套完整demo的点点滴滴(excel功能案例参数化+业务功能分层设计+mysql数据存储封装+截图+日志+测试报告+对接缺陷管理系统+自动编译部署环境+自动验证false、error案例)

    标题很大,想说的很多,不知道从那开始~~直接步入正题吧 个人也是由于公司的人员的现状和项目的特殊情况,今年年中后开始折腾web自动化这块:整这个原因很简单,就是想能让自己偷点懒.也让减轻一点同事的苦力 ...

  8. Web自动化框架搭建——前言

    1.web测试功能特性 a.功能逻辑测试(功能测试),这一块所有系统都是一致的,比如数据的添加.删除.修改:功能测试案例设计感兴趣和有时间的话可以另外专题探讨: b.浏览器兼容性测试,更重要的是体验这 ...

  9. java web SSO单点登录

    第一篇: Web应用系统的演化总是从简单到复杂,从单功能到多功能模块再到多子系统方向发展. .当前的大中型Web互联网应用基本都是多系统组成的应用群,由多个web系统协同为用户提供服务. 多系统应用群 ...

随机推荐

  1. Redis事务使用方法

    Redis事务 Redis事务是一组命令的集合,也是Redis的最小执行单位之一.一个事务的所有命令,要么都执行,要么都不执行.Redis能保证事务执行期间不会有其他命令插入. 相关命令 命令 格式 ...

  2. Linux 系统编程 学习:04-进程间通信2:System V IPC(1)

    Linux 系统编程 学习:04-进程间通信2:System V IPC(1) 背景 上一讲 进程间通信:Unix IPC-信号中,我们介绍了Unix IPC中有关信号的概念,以及如何使用. IPC的 ...

  3. GXOI2018 滚粗记

    今天考了一次蜜汁省选,滚粗了.想了想,还是写点什么记录一下 8:10 折腾一番总算拿到题目和样例了,一打开dpf,立马感觉到了不对劲. 题目一股浓浓的劣质模拟题的画风,先不说题目质量,单是排版质量都被 ...

  4. 解决nginx中js修改不生效的问题

    最近在做商城项目,使用nginx实现动静分离.结果在修改nginx文件夹下的js文件,浏览器访问网址现实的还是原来的旧的js文件.清理浏览器缓存,重启nginx均无效,最后在网上找到解决方案

  5. 835. Image Overlap —— weekly contest 84

    Image Overlap Two images A and B are given, represented as binary, square matrices of the same size. ...

  6. uniapp使用axios以及封装错误重试解决方案

    在uniapp中,使用axios进行请求时,uniapp无法使用axios的适配器,需要基于uni.request来定义适配器. 安装完成axios后在项目utils目录下建一个axios文件夹 文中 ...

  7. Git使用push命令卡住?

    为什么Git用ssh连不上GitHub,push就卡住,而用HTTPS可以连接.上一次用Git的ssh连接时候还可以,这段时间再重新使用Git却发现ssh方式push到Git,每次一push就卡住,找 ...

  8. 炸了!一口气问了我18个JVM问题!

    前言 GC 对于Java 来说重要性不言而喻,不论是平日里对 JVM 的调优还是面试中的无情轰炸. 这篇文章我会以一问一答的方式来展开有关 GC 的内容. 不过在此之前强烈建议先看这篇文章深度揭秘垃圾 ...

  9. Python 中 'unicodeescape' codec can't decode bytes in position XXX: trun错误解决方案

    window 读取文件可以用\,但是在字符串中\是被当作转义字符来使用,'C:\Users\FrankYuan\Pictures\Camera Roll\WIN_20161010_08_51_57_P ...

  10. 异常记录-Gradle依赖掉坑之旅

    前言 最近在项目中遇到了一个问题,死活拉不下来依赖,耗费了一整天,感觉自己真是菜的抠脚. 没想到今天脑子一清醒,刷刷的问题逐个击破了. 问题描述: 项目成员添加了新的依赖,然后我这边项目拉下来,bui ...