selenium修改cookie
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的更多相关文章
- 『心善渊』Selenium3.0基础 — 20、Selenium对Cookie的操作
目录 1.Cookie介绍 2.Session介绍 3.Cookie工作原理图解 4.Cookie内容参数说明 5.Selenium操作Cookie的API 6.Selenium操作Cookie的示例 ...
- 云计算之路-阿里云上:负载均衡错误修改Cookie造成用户无法登录
最近陆续有用户反馈在我们网站上登录时遇到登录死循环问题.输入用户名与密码提交后,显示登录成功,但跳转到目标网址后(由于依然处于未登录状态)又跳转回登录页面,再次登录,再次这样...就这样一直循环,怎么 ...
- 设置cookie,获取cookie,删除cookie,修改cookie
怎么设置cookie,怎么设置cookie以及删除cookie和cookie详解 在操作cookie之前,先来看一下cookie长什么样. 可以看到,cookie是一个个键值对(“键=值”的形式)加上 ...
- 通过google浏览器的开发者工具修改cookie值
打开一个页面F12,然后再刷新下.点到如下图位置刚可以添加或重设cookie的值.修改cookie的值时,需要注意要清除下cookie.不然修改的cookie不生效.
- 谷歌浏览器修改cookie访问网页的小插件——EditsThisCookie
cookie是服务器用来区分不同的浏览器客户端的,比如学生A和B同一时段用各自的电脑访问学校访问学校的教务系统查看成绩,登录之后,访问同一页面确出来不同的信息,并且不能查看对方的信息,这就是因为服务器 ...
- 在php中修改cookie值遇到的奇怪问题
本想修改cookie的值比较简单,结果测试发现并不是. 刚开始实现cookie修改的思路:先删除以前的cookie值,再创建一个新的. setcookie('name',value,time()-1) ...
- 服务器无法在发送 HTTP 标头之后修改 cookie
隔三差五就碰到VS报错: System.Web.HttpException:“服务器无法在发送 HTTP 标头之后修改 cookie.” 解决后过几天又忘记了. 原因是: 程序为每个页面在config ...
- python+selenium操作cookie
WebDriver提供了操作Cookie的相关方法,可以读取.添加和删除cookie信息. WebDriver操作cookie的方法: get_cookies(): 获得所有cookie信息. get ...
- 关于MVC中 服务器无法在发送 HTTP 标头之后修改 cookie此类问题的解决
处理方法 使用过滤器控制权限时,若无权则跳转到无权页面,但是每次跳转都会出现 ERROR - System.Web.HttpException (0x80004005): 服务器无法在已发送 HTTP ...
随机推荐
- 彻底清空SharePoint回收站(仅限IE)
1.导航到回收站页面2.F12,在控制台输入javascript:emptyItems()3.回车 4.点击确定即可 注意:这种方法可能只适用于Internet Explorer
- MVC Views文件夹下js无法访问问题解决方案
出现这个问题是因为webconfig做的限制,可修改相应Views下的webconfig文件来解决. <system.webServer> <handlers> <rem ...
- 常用sql 集合记录整理
select 'truncate table ' + Name + ';' from sysobjects where xtype='U' order by name asc; -- 查询出指定库的 ...
- SQL使用之关联更新、批量插入
使用场景 某个字段数据异常,利用另外一张表同步修改该表异常字段的数据; 关联更新 UPDATE tableName1 AS t1 LEFT JOIN tableName12 AS t2 ON t1.x ...
- MAC 终端走代理服务器
问题描述: MAC 终端,默认不走代理服务器:即浏览器已经可以FQ,但是终端不行: 解决方案:直接设置终端的代理,本文 用的是 shadowSocksX: 打开终端,直接执行:(执行后,只对当前终端起 ...
- PHP安装APC扩展,亲测成功
1.在浏览器中输入https://pecl.php.net/package/APC选择安装包激进型下载.(可以选择Windows版本或者是Linux版本).注:以下是在Linux系统上进行操作!
- arm浮点运算
首先总结一下计算机中的浮点数的存储. 浮点数的标准是IEEE-754,规定了浮点数的存储都是通过科学计算法来存储的,n2-e的表示. 浮点数首先分为,定浮点(fixed-point)和浮点(float ...
- IO流(一)
一.异常 概述 异常就是Java程序在运行过程中出现的错误. 由来 问题也是现实生活中一个具体事务,也可以通过java的类的形式进行描述,并封装成对象.其实就是Java对不正常情况进行描述后的对象体现 ...
- GO : 斐波纳契数列
package main import "fmt" // fibonacci is a function that returns // a function that retur ...
- redis 在 php 中的应用(Set篇)
本文为我阅读了 redis参考手册 之后编写,注意 php_redis 和 redis-cli 的区别(主要是返回值类型和参数用法) Redis的 Set 是 string 类型的无序集合.集合成员是 ...