WebDriver操作cookie的方法:cookie以字典形式保存

  • get_cookies()     获取所有的cookie
  • get_cookie(name)   返回字典的key为"name"的cookie信息
  • add_cookie(cookie_dict)   添加字典形式的cookie
  • delete_cookie(name)   删除cookie
  • delete_alla-cookies():删除所有cookie信息

最近在写项目的登录功能时,需要把线上环境的token和测试环境的结合使用。所以需要对测试环境的cookie操作。

思路是:用selenium登录测试环境,同时也用进程在后台用headless方式登录线上环境。取到线上的token,再给测试环境用。

代码如下:

1、获取线上环境代码


 from multiprocessing import Process
from pageobjects.production_login import Product_Login
from config.cfg import *
import time class Test_Login:
'''登录测试环境'''
def __init__(self,driver):
self.driver = driver def open_browser(self):
self.driver.maximize_window()
self.driver.implicitly_wait(10) # 等待 def login(self):
'''登录测试环境,添加线上Token'''
self.driver.get(test_url)
self.driver.find_element_by_id("vcc_code").send_keys(vcc[1])
self.driver.find_element_by_id("username").send_keys(username[1])
self.driver.find_element_by_id("password").send_keys(password)
self.driver.find_element_by_id('btn').click()
self.driver.delete_cookie('access_token') # 删除测试环境的token def add_cookie(self,product):
'''读取线上token,写入cookie'''
new_token = product.readtoken()[0]
self.driver.add_cookie(new_token) def login_test(self):
product = Product_Login()
lastTime = product.readtoken()[1] #获取日期
if (time.strftime("%d")) == lastTime: #如果日期是今天,则直接取token
self.login()
self.add_cookie(product)
else:
p = Process(target=product.login_production) #运行线上环境进程
p.start()
self.login()
p.join() #等待
self.add_cookie(product) def close_browser(self):
self.driver.quit()

2、测试环境使用token


 import time , unittest,json
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from config.cfg import * class Product_Login:
'''登录线上环境,把获取的token写入配置文件''' def login_production(self):
'''selenium+chromeheadless获取线上环境Token'''
day = time.strftime("%d") chrome_options = Options()
chrome_options.add_argument('--headless')
driver = webdriver.Chrome(options=chrome_options)
driver.implicitly_wait(10) # 等待
driver.get(production_url)
driver.find_element_by_id("vcc_code").send_keys(vcc[0]) # 登录
driver.find_element_by_id("username").send_keys(username[0])
driver.find_element_by_id("password").send_keys(password)
driver.find_element_by_id('btn').click() manage_cookie = driver.get_cookie('access_token')
driver.quit()
manage_cookie = json.dumps(man_cookie)
self.writetoken(day,man_cookie) def writetoken(self, nowTime,manage_cookie): # 写线上token out = open(r'D:\config.txt', 'w')
out.writelines(man_cookie) #写入token
out.writelines("\n")
out.writelines(nowTime) #写入日期
out.writelines("\n")
out.close() def readtoken(self): # 读token out = open(r'D:\config.txt', encoding='utf-8')
lines = out.readline() #token
if (lines.__contains__("\n")):
lines = lines.split("\n")[0]
lines = json.loads(lines)
lines1 = out.readline() #日期
if (lines1.__contains__("\n")):
lines1 = lines1.split("\n")[0] out.close()
return lines,lines1
 

selenium修改cookie的更多相关文章

  1. 『心善渊』Selenium3.0基础 — 20、Selenium对Cookie的操作

    目录 1.Cookie介绍 2.Session介绍 3.Cookie工作原理图解 4.Cookie内容参数说明 5.Selenium操作Cookie的API 6.Selenium操作Cookie的示例 ...

  2. 云计算之路-阿里云上:负载均衡错误修改Cookie造成用户无法登录

    最近陆续有用户反馈在我们网站上登录时遇到登录死循环问题.输入用户名与密码提交后,显示登录成功,但跳转到目标网址后(由于依然处于未登录状态)又跳转回登录页面,再次登录,再次这样...就这样一直循环,怎么 ...

  3. 设置cookie,获取cookie,删除cookie,修改cookie

    怎么设置cookie,怎么设置cookie以及删除cookie和cookie详解 在操作cookie之前,先来看一下cookie长什么样. 可以看到,cookie是一个个键值对(“键=值”的形式)加上 ...

  4. 通过google浏览器的开发者工具修改cookie值

    打开一个页面F12,然后再刷新下.点到如下图位置刚可以添加或重设cookie的值.修改cookie的值时,需要注意要清除下cookie.不然修改的cookie不生效.

  5. 谷歌浏览器修改cookie访问网页的小插件——EditsThisCookie

    cookie是服务器用来区分不同的浏览器客户端的,比如学生A和B同一时段用各自的电脑访问学校访问学校的教务系统查看成绩,登录之后,访问同一页面确出来不同的信息,并且不能查看对方的信息,这就是因为服务器 ...

  6. 在php中修改cookie值遇到的奇怪问题

    本想修改cookie的值比较简单,结果测试发现并不是. 刚开始实现cookie修改的思路:先删除以前的cookie值,再创建一个新的. setcookie('name',value,time()-1) ...

  7. 服务器无法在发送 HTTP 标头之后修改 cookie

    隔三差五就碰到VS报错: System.Web.HttpException:“服务器无法在发送 HTTP 标头之后修改 cookie.” 解决后过几天又忘记了. 原因是: 程序为每个页面在config ...

  8. python+selenium操作cookie

    WebDriver提供了操作Cookie的相关方法,可以读取.添加和删除cookie信息. WebDriver操作cookie的方法: get_cookies(): 获得所有cookie信息. get ...

  9. 关于MVC中 服务器无法在发送 HTTP 标头之后修改 cookie此类问题的解决

    处理方法 使用过滤器控制权限时,若无权则跳转到无权页面,但是每次跳转都会出现 ERROR - System.Web.HttpException (0x80004005): 服务器无法在已发送 HTTP ...

随机推荐

  1. 3n+1猜想——模拟

    package dxb.com; import java.util.Scanner; public class caixiang { public static void main(String[] ...

  2. 简单了解request与response

    本文对 request. response 简单描述,未涉及到具体的浏览器缓存.重定向.请求转发等代码部分. 一.Web服务器,浏览器,代理服务器 在看 response.request 对象之前,先 ...

  3. Median

    #include <stdio.h> #include <stdlib.h> #include <math.h> #define MAXSIZE 1000 int ...

  4. Github上36893颗星!这个被称为下一代企业级应用首选技术你学了么?

    ​ 用一句话概括:这个技术,是JAVA后端框架的龙头老大,执牛耳者.这个技术就是: Spring Boot春靴. Spring Boot到底凭什么成为Java社区最具影响力的项目?说直白点,他爹Spr ...

  5. Linux命令行基础

    常用命令 命令 功能 pwd 打开当前所在的文件目录 ls 查看当前文件夹下的文件(不包括隐藏文件) ls -a 查看当前文件夹下的文件(包括隐藏文件) ls -al 查看当前文件夹下的文件(包括隐藏 ...

  6. MFC DDX_Control 与 DDX_Text

    DDX_TEXT()的作用可以理解为把字符串变量和控件的文本(WindowText)关联起来, DDX_Control()的作用可以理解为把变量和控件本身关联起来, DoDataExchange(pD ...

  7. Spring增强代理模式

    1. 依赖注入;(掌握) 2. XML自动注入;(掌握) 3. 全注解配置;(掌握) 4. 代理模式;(掌握,难点) 依赖注入 构造参数注入 constructor-arg:构造器注入: index: ...

  8. 微信小程序如何实现点击链接跳转到手机自带浏览器

    最近遇到一个需求.公司有一个业务,制作的小程序需要跳出微信打开一个指定的我们自己的页面,拿到这个需求后我们团队分开去找资料研究方案,通过微信的开发文档.腾讯的第三方开发文档我们都查阅过资料但是最终只找 ...

  9. 利用Oracle Database Resource Manager实现UNDO表空间的quota

    1.查出当前使用的是哪个resource plan select * from GV$RSRC_PLAN 2.创建pending area begin  dbms_resource_manager.c ...

  10. SQL- @@ROWCOUNT -返回上一行执行影响的行行数

    DECLARE @AFFECT INT declare @t table(name nvarchar(20),qy nvarchar(20),je int)insert into @t select ...