selenium cookie 登录
前言
爬虫方向的小伙伴们都知道网页爬虫经常遇到的问题就是登录账户,有些简单的网站我们可以简单的send key来输入账户密码就可以登录,但是有很多网站需要验证码之类的就不太好用了,这时候就体现到了cookie登录的优点了,前段时间网上搜了搜,发现没有什么完整的教程,本文就使用selenium来cookie登录为例做一个简单的教程。
环境准备
- python3
- selenium
- chromedriver
selenium就不再过多解释了,我们在使用的过程中唯一需要注意的就是自己浏览器版本与driver版本的问题,至于具体对应版本,在chromedriver下载页面中会有显示
代码编写
这次就以 百度 为例,www.baidu.com 首先使用 selenium 打开百度看一下未登录是什么样子
代码:
from selenium import webdriver #填写webdriver的保存目录
driver = webdriver.Chrome('../chromedriver.exe') #记得写完整的url 包括http和https
driver.get('https://www.baidu.com')

这就是直接打开的样子,我们想要将网页变成登录后的样子,如下图

这是登录账号后的样子,那么我们该怎么获取cookie以达到登录效果呢?
我们可以直接使用F12查看当前网页的cookie,但是你会发现直接获取到的并不是那么好插入到selenium中,因为cookie在浏览器中实际是这个样子的

它需要额外添加一些东西,那么我们该如何获取呢?其实也很简单,最简单的方法就是我们首先使用selenium手动登录一下然后获取cookie值保存到本地,之后再登陆的时候直接调用本地cookie就可以了
怎么获取呢?selenium有一个 get_cookies() 函数可以帮我们获取当前网页的cookie值,所以我们首先编写一个 getcookies.py 文件来获取cookie值
from selenium import webdriver
import time
import json #填写webdriver的保存目录
driver = webdriver.Chrome('../chromedriver.exe') #记得写完整的url 包括http和https
driver.get('https://www.baidu.com') #程序打开网页后20秒内手动登陆账户
time.sleep(20) with open('cookies.txt','w') as cookief:
#将cookies保存为json格式
cookief.write(json.dumps(driver.get_cookies())) driver.close()
运行程序后如下图 点击登录 输入账号密码,输入验证码(程序内写的20秒完成操作,因为20秒后程序将获得cookies)

现在发现项目目录下已经有了一个名称为 cookies.txt 的文件 ,现在我们已经将cookies保存到了本地,现在我们来编写程序使用cookies
编写 addcookies.py 文件
from selenium import webdriver
import time
import json #填写webdriver的保存目录
driver = webdriver.Chrome('../chromedriver.exe') #记得写完整的url 包括http和https
driver.get('https://www.baidu.com')
#首先清除由于浏览器打开已有的cookies
driver.delete_all_cookies() with open('cookies.txt','r') as cookief:
#使用json读取cookies 注意读取的是文件 所以用load而不是loads
cookieslist = json.load(cookief)
for cookie in cookieslist:
driver.add_cookie(cookie)
运行,有小伙伴可能会发现现在出问题了,在插入cookie的时候 返回错误
selenium.common.exceptions.InvalidArgumentException: Message: invalid argument: invalid 'expiry'
这个 expiry 是什么呢? 它是cookie的生命周期,也就是失效时间,为什么在这里会报错呢?我们有两种解决办法
- #方法1 将expiry类型变为int(其实不太清楚为什么变为int就可以)
- #方法2删除该字段
重新编写代码:
from selenium import webdriver
import json #填写webdriver的保存目录
driver = webdriver.Chrome('../chromedriver.exe') #记得写完整的url 包括http和https
driver.get('https://www.baidu.com')
#首先清除由于浏览器打开已有的cookies
driver.delete_all_cookies() with open('cookies.txt','r') as cookief:
#使用json读取cookies 注意读取的是文件 所以用load而不是loads
cookieslist = json.load(cookief) # 方法1 将expiry类型变为int
for cookie in cookieslist:
#并不是所有cookie都含有expiry 所以要用dict的get方法来获取
if isinstance(cookie.get('expiry'), float):
cookie['expiry'] = int(cookie['expiry'])
driver.add_cookie(cookie) #方法2删除该字段
# for cookie in cookieslist:
# #该字段有问题所以删除就可以 浏览器打开后记得刷新页面 有的网页注入cookie后仍需要刷新一下
# if 'expiry' in cookie:
# del cookie['expiry']
# driver.add_cookie(cookie)
这时候发现没有报错了,可以发现,怎么还是登录之前的页面啊?为什么cookies插入成功了却不是登陆后的页面?
别急,这时候我们点击一下浏览器的刷新就会发现其实已经登录上去了只不过页面没有变化而已,所以一定记得点刷新,现在我们就成功的使用cookie完成了登录操作。
selenium cookie 登录的更多相关文章
- python selenium cookie 登录
概要: 1.正常登录,使用selenium获取cookie: 2.保存cookie: 3.使用cookie登录. 4.python--2.7,selenium--3.4.1 步骤1 正常登录,使用se ...
- Python Selenium Cookie 绕过验证码实现登录
Python Selenium Cookie 绕过验证码实现登录 之前介绍过博客园的通过cookie 绕过验证码实现登录的方法.这里并不多余,会增加分析和另外一种方法实现登录. 1.思路介绍 1.1. ...
- 4 使用Selenium模拟登录csdn,取出cookie信息,再用requests.session访问个人中心(保持登录状态)
代码: # -*- coding: utf-8 -*- """ Created on Fri Jul 13 16:13:52 2018 @author: a " ...
- selenium验证码处理之cookie登录
在实际测试中会经常见到登录操作需要验证码验证登录 常见验证有以下几种: 验证码登录 图片识别 图片滑块识别验证 4.简单验证码计算 针对上面的登录验证解决办法有以下几种: 1.让开发去掉验证码 ...
- 3 使用selenium模拟登录csdn
之前通过F12开发者模式调试,获取网站后台服务器验证用户名和密码的URL之后,再构造post数据的方式会存在一个问题,就是对目标网站的验证机制不明确,构造post数据除了用户名和密码之外,还可能有更复 ...
- 自动化测试: Selenium 自动登录授权,再 Requests 请求内容
Selenium 自动登录网站.截图及 Requests 抓取登录后的网页内容.一起了解下吧. Selenium: 支持 Web 浏览器自动化的一系列工具和库的综合项目. Requests: 唯一的一 ...
- JMeter学习-018-JMeter 配置元件之-HTTP信息头管理器-实现 Cookie 登录
之前写过一篇通过[HTTP Cookie管理器]实现登录态操作的文章,使用时需要配置每个键值对(如下图所示),相对来讲配置比较繁琐.其实,我们也可通过在[HTTP信息头管理器]添加 Cookie 信息 ...
- JMeter学习-012-JMeter 配置元件之-HTTP Cookie管理器-实现 Cookie 登录
前文我们讲过了若何获取登录后的 Cookie 信息,不知如何获取登录 Cookie 的朋友,敬请参阅我之前写的博文:Fiddler-005-获取 Cookie 信息.参阅上篇文章,获取到 Cookie ...
- Asp.Net Core 2.0 项目实战(10) 基于cookie登录授权认证并实现前台会员、后台管理员同时登录
1.登录的实现 登录功能实现起来有哪些常用的方式,大家首先想到的肯定是cookie或session或cookie+session,当然还有其他模式,今天主要探讨一下在Asp.net core 2.0下 ...
随机推荐
- 【2018.08.01】(表/栈/队列/大小顶堆)学习Stark和Queue算法小记
Train Problem I As the new term comes, the Ignatius Train Station is very busy nowadays. A lot of st ...
- 【原】Python基础-序列
1 序列 在Python中,最基本的数据结构是序列,序列中每个元素被分配一个编号,也称为索引.第一个索引为0,第二个则是1,以此类推.序列中最后一个元素被标为-1,倒数第二个元素被标为-2,以此类推. ...
- MindManager2018试用期过后 修改过期时间 破解使用
MindManager2018试用期过后 修改过期时间 破解使用 2019年06月13日 15:58:11 一生中所爱 阅读数 1991更多 分类专栏: 工具软件使用 1.找到路径:C:\User ...
- Row_Number() and Rank() in SQL
1. 数据表实例数据 2. 使用Row_Number()方法给每一行数据添加一个唯一编号, 可以按照某一列进行排序. 3. 使用Partition by Column在一个Partition内进行编号 ...
- python mysql使用问题
(deeplearning2) userdeMBP:ageAndGender user$ python Python |Anaconda, Inc.| ( , ::) [GCC Compatible ...
- vue+php接口
php: <?php header('Access-Control-Allow-Origin:*'); $date = $_POST['data'];$cars=array("Volv ...
- 006-多线程-集合-Set-ConcurrentSkipListSet
一.简介 ConcurrentSkipListSet是线程安全的有序的集合,适用于高并发的场景.ConcurrentSkipListSet和TreeSet,它们虽然都是有序的集合.但是,第一,它们的线 ...
- Kubernetes简介二
Kubernetes是什么?Kubernetes是容器集群管理系统,是一个开源的平台,可以实现容器集群的自动化部署.自动扩缩容.维护等功能.通过Kubernetes你可以: 快速部署应用 快速扩展应用 ...
- (十二)Centos之关机和重启
- AFN使用etag进行网络缓存
前提:后台返回的接口带etag 第一步 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:( ...