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. numpy(二)

    通用函数: np.add  加 np.subtract  减 np.multiply  乘 np.divide  除 np.floor_divide  地板乘除法,取商 np.power  指数运算  ...

  2. 如何查看端口recv和send

    1.进入到pod的宿主机   一般来说 ssh  slaveX 2.查看进程号   top可以看到 3.执行命令    nsenter --target 10594 --net netstat -an

  3. table添加正确的样式

    以前在做表格的时候,会在表格<table>标签中添加一些属性,来改变表格的样式,经常用到的有这几个 width 表格的宽度border 表格边框的宽度cellpadding  单元边沿与其 ...

  4. 转:select2 使用教程(简)

    用了这么久的Select2插件,也该写篇文章总结总结.当初感觉Select2不是特别好用,但又找不到比它更好的下拉框插件. 在我的印象里Select2有2个版本,最新版本有一些新的特性,并且更新了一下 ...

  5. Mybatis的updateByExampleSelective方法

    好久没些项目,一些基础框架的功能都忘记了,慢慢边做边回忆,果然自己是三流的(某个大佬说过三流的程序员看CSDN和博客) API:可以只更新传入的参数 updateByExampleSelective( ...

  6. cocos2dx在win10系统上的VS2017运行时报错:丢失MSVCR110.dll

    如题,运行环境为cocos2dx 3.14.1,win10系统,VS2017. 编译cocos2dx的cocos2d-x-3.14.1/build/cocos2d-Win32.sln已通过,不过运行时 ...

  7. Unity如何退出游戏

    使用 Application.Quit(),但在 editor 模式下使用 Application.Quit()是没用的,要用 EditorApplication.isPlaying = false. ...

  8. ng2

    angularjs2的环境问题解决了好久. 百度到的答案也是各种各样还解决不了我的问题. 好在这几天经过不断的测试终于给解决了. ERROR in AppModule is not an NgModu ...

  9. 读取FTP 图片文件,并显示,非下载

    关于FTP,先从怎么创建开始说起,很简单,步骤就两个 ① 电脑-右键管理--本地用户组--添加用户名,密码(用于FTP的用户名.密码) ② IIS 新建FTP站点,命名,指定端口号.FTP文件路径 接 ...

  10. TTL和COMS电平匹配以及电平转换的方法

    一.TTL TTL集成电路的主要型式为晶体管-晶体管逻辑门(transistor-transistor logic gate),TTL大部分都采用5V电源.1.输出高电平Uoh和输出低电平UolUoh ...