【Python】Selenium操作cookie实现免登录

news2024/11/18 13:35:29

文章目录

    • 一、查看浏览器cookie
    • 二、获取cookie基本操作
    • 三、获取cookie并实现免登录
    • 四、封装成函数

一、查看浏览器cookie

cookie、session、token的区别:

  • cookie存储在浏览器本地客户端,发送的请求携带cookie时可以实现登录操作。
  • session存放在服务器。
  • token应用于应用程序。

F12查看浏览器cookie:
在这里插入图片描述

二、获取cookie基本操作

from selenium import webdriver

url = "http://www.baidu.com/"
driver = webdriver.Chrome()
driver.implicitly_wait(20)
driver.get(url)
cur_cookies = driver.get_cookies() #获取所有cookie
baidu_id_cookie = driver.get_cookie('BAIDUID')  #获取单个cookie
print(len(cur_cookies))
print(cur_cookies) #输出cookie值
print(baidu_id_cookie)
driver.quit()

运行结果如下:
在这里插入图片描述

三、获取cookie并实现免登录

以登录163邮箱为例。
1、首先登录163邮箱,将cookie保存到本地文件中:

from selenium import webdriver
from time import sleep
import json
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.get('https://mail.163.com/')
driver.implicitly_wait(20)
driver.switch_to.frame(0)
driver.find_element(By.NAME,"email").send_keys('xxx@163.com')
driver.find_element(By.NAME,"password").send_keys('xxxxxx')
driver.find_element(By.ID,"dologin").click()
sleep(3)
mycookies = driver.get_cookies()
jsoncookies = json.dumps(mycookies)
with open("mycookie.json",'w') as f:
    f.write(jsoncookies)
driver.quit()

运行完成后,脚本所在目录会生成一个名为"mycookie.json"的文件,文件内容如下:
在这里插入图片描述
2、然后通过读取该cookie文件,实现免登录效果:

from selenium import webdriver
import time
import json
from time import sleep

driver = webdriver.Chrome()
driver.get("https://mail.163.com")
cookie_file_path = "mycookie.json"
with open(cookie_file_path,"r") as f:
    cookies_str = f.readline()
    cookies_dict = json.loads(cookies_str)

driver.delete_all_cookies() # 删除当前网址的所有cookie
for cookie in cookies_dict: # 循环读取cookie
    for k in cookie.keys(): # 判断一下
        if k == "expiry":
            cookie[k] = int(cookie[k]) # expiry参数必须为整型
        driver.add_cookie(cookie)
time.sleep(2)
driver.refresh()
sleep(5)
driver.quit()

注意:

  • 在添加cookie时,需要将expiry对应的值转换为整型,否则会报错。
  • 添加cookie后,需要借助refresh关键字刷新页面
  • cookies存在有效期,之前导出的cookie可能会失效,失效则需要重新导出。

四、封装成函数

为方便后续调用“通过cookie实现免登录”的方法,可以将代码封装成函数:

def url_with_cookie(driver, target_url, file):
    cookies_file_path = file
    cookies_file = open(cookies_file_path,"r")
    cookies_str = cookies_file.readline()
    cookies_dict = json.loads(cookies_str)
    time.sleep(2)
    driver.get(target_url)
    driver.delete_all_cookies()
    for cookie in cookies_dict:
        for k in cookie.keys():
            if k =="expiry":
                cookie[k] = int(cookie[k])
            driver.add_cookie(cookie)
    time.sleep(2)
    driver.refresh()

if __name__ == '__main__':
    from selenium import webdriver
    import json
    import time
    from time import sleep

    driver = webdriver.Chrome()
    url_with_cookie(driver,'https://mail.163.com','mycookie.json')
    sleep(5)
    driver.quit()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/729925.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MybatisPlus逆向生成实体类等

面试中遇到的一道机操题&#xff0c;so simple。 这是里SpringBoot项目&#xff0c;注意你的数据表中只有一个id字段是会生成失败的&#xff01; 添加maven依赖 <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter…

虚幻引擎程序化资源生成框架PCG 之 UPCGBlueprintElement源码笔记

UPCGBlueprintElement是PCGGraph中自定义节点的基类&#xff0c;但官方目前还没有给出详细的文档&#xff0c;所以从源代码里找点答案。 文章目录 可覆盖函数&#xff08;Override Functions&#xff09;Excute 和 Excute with ContextLoop Body函数和Loop函数Point Loop Body和…

SpringBoot+ Vue 家乡美食系统

&#x1f495;&#x1f495;作者&#xff1a;程序员徐师兄 个人简介&#xff1a;7 年大厂程序员经历&#xff0c;擅长Java、微信小程序、Python、Android等&#xff0c;大家有这一块的问题可以一起交流&#xff01; 各类成品java毕设 。javaweb&#xff0c;ssh&#xff0c;ssm&…

[期末网页作业]-精仿华为官网10个网页(html+css+js)

经过漫长的期末考试季节&#xff0c;我成功地完成了一个华为官网的仿写项目&#xff0c;并且非常高兴地与大家分享。这个项目包含了10个页面&#xff0c;每一个页面都经过了精心的设计和努力的填充。 首先&#xff0c;我注重了页面的整体布局与设计。借鉴了华为官网的风格&…

Unity3d-UGUI实现的贪食蛇小游戏

按鼠标WASD键来控制蛇的走向。 核心的代码如下&#xff1a; using UnityEngine; using System.Collections; using System.Collections.Generic; using UnityEngine.UI;/// 《UGUI贪吃蛇》public class TCS2d : MonoBehaviour {public bool isOver false;public bool isStop…

【Docker 部署Minio】

Docker 部署Minio 一、拉取Minio镜像二、配置1、创建如下目录2、创建容器并运行 三、访问 一、拉取Minio镜像 访问Docker Hub镜像站找到自己需要的Minio镜像 运行以下命令 sudo docker pull minio/minio二、配置 1、创建如下目录 mkdir -p /home/zx/minio/config mkdir -p…

Java设计模式之一:建造者模式

目录 一、什么是建造者模式 二、建造者模式如何使用 三、建造者模式的优势和应用场景 一、什么是建造者模式 Java建造者模式是一种创建对象的设计模式&#xff0c;它通过将对象的构造过程分离出来&#xff0c;使得同样的构建过程可以创建不同的表示。建造者模式适用于创建复…

在前端页面正确展示后端返回的验证码图片

前言&#xff1a; 在开发登录界面时&#xff0c;通过接口请求验证码&#xff1b;后端给返回的格式是Blob&#xff0c;直接用src引用没办法显示。 在控制台输入结果是&#xff1a; 第一想法就是通过 window.URL.createObjectURL(new Blob([res.data],{type:image/png}))转换成u…

【底部消息红点提示】uniapp开发小程序时,使用uni.setTabBarBadge设置底部菜单的红点

一、实现的效果 功能描述&#xff1a;无论点击底部的哪个菜单栏&#xff0c;都可以看到第二个菜单栏下显示的红点通知。 如果只在人脉当前页面设置的话&#xff0c;当你在第二个菜单栏的页面中调用uni.setTabBarBadge方法设置红点后&#xff0c;切换到第一个菜单栏的页面时&am…

力扣 332. 重新安排行程

题目来源&#xff1a;https://leetcode.cn/problems/reconstruct-itinerary/description/ C题解&#xff08;来源代码随想录&#xff09;&#xff1a; 这道题目有几个难点&#xff1a; 一个行程中&#xff0c;如果航班处理不好容易变成一个圈&#xff0c;成为死循环。解决&am…

【论文基本功】【LaTeX】附录【IEEE论文】

注意&#xff1a;本博客使用的所有命令都需要以使用 IEEEtran 文档类为前提&#xff0c;即 tex 文件的第一行中的必须是 \documentclass[可选参数]{IEEEtran}&#xff08;可选参数部分可以自由选择&#xff0c;如 \documentclass[10pt,journal,compsoc]{IEEEtran}。&#xff09…

C++primer(第五版)第十三章(拷贝控制)

一个类通过定义五种特殊的成员函数来控制这些操作: 拷贝构造函数 拷贝赋值运算符 移动构造函数 移动赋值运算符 析构函数 13.1拷贝,赋值与销毁 13.1.1拷贝构造函数 如果一个构造函数的第一个参数是自身类型的引用(必须是引用类型!),并且没有其他参数或是其他参数都有默认值(即…

基于matlab检测使用校准的立体摄像头拍摄的视频中的人物并确定其与摄像头的距离(附源码)

一、前言 此示例演示如何检测使用校准的立体摄像头拍摄的视频中的人物&#xff0c;并确定他们与摄像头的距离。 二、加载立体摄像机的参数 加载对象&#xff0c;这是使用应用程序或函数校准相机的结果。 三、创建视频文件阅读器和视频播放器 创建用于读取和显示视频的系统对…

LabVIEW开发X射线图像增强

LabVIEW开发X射线图像增强 X射线图像在临床诊断中起着重要作用。但是&#xff0c;由于各种原因&#xff0c;例如不均匀&#xff0c;低照度条件和一些噪点&#xff0c;图像质量通常不是很好。因此有必要增强这些图像&#xff0c;以方便后续处理或诊断。模糊集论是开发图像处理中…

C# Color的名称对应该工具

工具效果如下图&#xff1a; 代码&#xff1a; namespace WinFormsColor {public partial class Form1 : Form{public Form1(){InitializeComponent();}private void displayColor(){Control listControl this.Controls["listView_Color"];if (listControl ! null)…

mysql的一些练习题

1. 第1题 mysql> create database Market charset utf8; Query OK, 1 row affected (0.01 sec)第二题 mysql> use Market Database changed mysql> mysql> create table customers(-> c_num int(11) primary key auto_increment,-> c_name varchar(50),-&…

【自动化测试】

一、自动化测试定义 首先来说一下什么是软件测试&#xff1f; 软件测试简单来说就是在规定的条件下对程序进行操作以发现程序错误&#xff0c;衡量软件质量&#xff0c;并对其是否能满足设计要求进行评估的过程。 那么什么是自动化测试呢? 自动化测试是把以人为驱动的测试…

使用Jxbrowser7替换浏览器请求内容和header

前几天一个伙计让我帮他做jxbrowser的请求内容(requestBody&#xff0c;Header)的替换&#xff0c;特此记录。 通过官网文档查阅&#xff0c;我们可以通过BeforeSendUploadDataCallback和BeforeStartTransactionCallback来实现body和header的替换

MySQL之DQL(涵盖所有查询!!!)

文章目录 前言一、基础查询1.1 语法1.2 实例 二、条件查询2.1 语法2.2 条件查询实例2.3 模糊查询实例 三 、排序查询3.1 语法3.2 实例 四 、聚合函数4.1 概念4.2 聚合函数分类4.3 聚合函数语法4.4 实例 五、分组查询5.1 语法5.2 实例 六、分页查询6.1 语法6.2 实例 前言 在上一…

Docker 是什么,在 Ubuntu 虚拟机上安装(部署)Docker

本文目录 1. Docker 简介1.1 什么是 Docker1.2 Docker 与虚拟技术的区别和联系1.3 为什么要用 Docker 2. 几个基本概念2.1 镜像2.1.1 分层存储 2.2 容器2.3 仓库2.3.1 Docker Registry 公开服务2.3.2 私有 Docker Registry 3. Docker 安装3.1 卸载旧版本 Docker3.2 更新及安装工…