Selenium 保存会话信息避免重复登录实战!

前言

  • • 在一些实际开发场景中,我们在使用 Selenium 做自动化测试时需要保留用户的会话信息,从而避免重复登录,今天这篇文章就带大家实战如何使用 Selenium 保存会话信息。

版本

  • • Python 3.x

整体思路

  • • 当我们打开页面时,检测会话信息文件是否存在,如果存在直接加载会话信息,如果不存在,则进行登录并保存会话信息到本地文件中。

实践

  • • 当我们第一次打开页面时,登录并保存会话信息。

    from selenium import webdriver
    from selenium.webdriver.common.keys import Keys
    import pickle

    第一次登录

    driver = webdriver.Chrome()

    driver.get("https://example.com/login")

    使用自动填充或其它方式登录

    username_input = driver.find_element_by_name("username")
    password_input = driver.find_element_by_name("password")
    username_input.send_keys("your_username")
    password_input.send_keys("your_password")
    password_input.send_keys(Keys.RETURN)

    登录成功后将driver.get_cookies()返回的cookies保存到名为"cookies.pkl"的文件中

    pickle.dump(driver.get_cookies(), open("cookies.pkl", "wb"))

    关闭 driver

    driver.close()

    第二次访问

    driver = webdriver.Chrome()

    这里需要提前访问一下再加载 cookies 否则会出现 InvalidCookieDomainException: Message: invalid cookie domain

    driver.get("https://example.com/login")

    加载 "cookies.pkl" 中的会话信息

    cookies = pickle.load(open("cookies.pkl", "rb"))
    for cookie in cookies:
    driver.add_cookie(cookie)

    携带会话信息访问

    driver.get("https://example.com/xxx")

问题

  • • 谷歌默认加载使用的是 data domain,所以需要先访问目标页面切换到对应的 domain:

    driver.get("https://example.com/login")

    加载 "cookies.pkl" 中的会话信息

    cookies = pickle.load(open("cookies.pkl", "rb"))
    for cookie in cookies:
    driver.add_cookie(cookie)

  • • 除此之外,如果你访问的目标页面为一级域名,而保存的 cookies 中存在二级域名的 domain,那么也会出现 invalid cookie domain 的问题,你可以将 cookiedomain 二级域名 domain 转换为 一级域名 domain 再进行加载,例如:

    cookies domain:
    .example.com
    .example.com
    xxx.example.com
    xxx.example.com

    那么需要全部调整为:
    .example.com
    .example.com
    .example.com
    .example.com

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走!

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

相关推荐
本地化文档1 分钟前
sphinxcontrib-rust-docs-l10n
python·rust·github·gitcode·sphinx
麻雀飞吧2 分钟前
2026年期货量化行情订阅层设计:主流平台Quote、K线与Tick取舍
python
眸生4 分钟前
基于NeteaseCloudMusicApi的音乐app 支持 DeepSeek 自然语言找歌、批量导入歌单、下载音乐转换成MP3,下载歌词
android·python·kotlin·android studio·音频·fastapi·android jetpack
SilentSamsara10 分钟前
HTTP 客户端实战:httpx/重试/限速/连接池/中间件设计
开发语言·网络·python·http·青少年编程·中间件·httpx
AI玫瑰助手20 分钟前
Python函数:可变参数(星号args与双星号kwargs)详解
android·开发语言·python
韦胖漫谈IT22 分钟前
选语言不是站队,是选适合问题的工具
java·python·ai·rust·go·技术落地
小白学大数据23 分钟前
业务落地:Python 列表在 AI 接口开发中的实战应用
人工智能·爬虫·python·microsoft
清水白石00823 分钟前
Python 可变对象与不可变对象深度解析:为什么 `tuple` 里可以放 `list`?
开发语言·python·list
源图客29 分钟前
【亚马逊 SP-API 实战】Java 批量创建变体 Listing(父商品 + 子变体 + 独立图片)完整教程(亲测可用)
java·大数据·python
Cinthia100330 分钟前
学习深度学习过程中对线性代数的几何理解
python·线性代数·机器学习