两个方法:

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. NB-IoT应用分类与技术特点分析

      NB-Iot作为一种窄带物联网技术在各大行业脱颖而出,其应用涵盖多个领域.此文计讯小编将讲解NB-IoT的主要应用分类及相关特点.   一.NB-IoT是什么   NB-IoT是指窄带物联网(Na ...

  2. .NetCore中简单使用EasyNetQ

    前言 我们在.Net中使用RabbitMQ,最原始的就是基于RabbitMQ.Client进行编码,在这个过程中我们需要通过代码约定和维护队列,Exchange等.如果是自行编码封装通用型的Rabbi ...

  3. malloc,calloc,realloc三者的区别

    malloc,calloc,realloc三者都可以运用与动态分配数组. malloc:用malloc必须要自己初始化,可以用memset(arr,0,cnt*sizeof(int)) calloc: ...

  4. 微信小程序获取二维码API

    <%@ WebHandler Language="C#" Class="ce" %> using System; using System.Web; ...

  5. 【QT】跨线程的信号槽(connect函数)

    线程的信号槽机制需要开启线程的事件循环机制,即调用QThread::exec()函数开启线程的事件循环. Qt信号-槽连接函数原型如下: bool QObject::connect ( const Q ...

  6. 7、Python语法之与用户交互、运算符

    一 .程序与用户交互 1.1.什么是与用户交互 用户交互就是人往计算机中input/输入数据,计算机print/输出结果. 1.2.为什么要与用户交互 为了让计算机能够像人一样与用户沟通交流. 比如, ...

  7. .NET 5.0正式发布,功能特性介绍(翻译)

    本文由葡萄城技术团队翻译并首发 转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 我们很高兴今天.NET5.0正式发布.这是一个重要的版本-其中也包括了C# ...

  8. 经典c程序100例==11--20

    [程序11] 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月 后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 1.程序分析: 兔子的规律为数列1 ...

  9. nginx&http 第三章 ngx 请求处理的 11 个阶段 --ngx_http_process_request& ngx_http_handler

    ngx_http_process_request如果设置了定时器则删除,既然所有的请求已经接收完毕,就不会再发生超时了 重设连接的读写回调函数 重设请求读事件回调函数 调用 ngx_http_hand ...

  10. c++函数声明的位置对函数重载的影响

    c++为了兼容c,也是采用(假)单遍编译.这特别影响函数重载决议(当c++编译器读到一个函数调用语句时,它必须从目前已看到的同名函数中选出最佳函数,哪怕后面的代码中出现了更合适的匹配) 1 #incl ...