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下 ...
随机推荐
- P5346 【XR-1】柯南家族(后缀数组+主席树)
题目 P5346 [XR-1]柯南家族 做法 聪明性是具有传递性的,且排列是固定的 那么先预处理出每个点的名次,用主席树维护\(k\)大值 一眼平衡树,遍历的同时插入\(O(log^2n)\),总时间 ...
- angularJs driective指令小实例
做一个下拉菜单,体会指令各参数的作用 html代码 <script type="text/ng-template" id="mydropdown.html" ...
- 图灵学院java架构课程
1.wps文档地址 https://docs.qq.com/doc/DRVNLUndvTmFSdEhO 2.百度网盘地址 https://pan.baidu.com/s/1uxaTzJZHKrsw_H ...
- ansible 错误记录(1)
基本环境:docker基于centos7 在docker里面安装ansible 不管是在root还是普通用户下执行 ansible all -m ping 都报如下错误: 172.20.1.1 | ...
- 我的BO之导航属性
我的BO 1-我的BO之强类型 2-我的BO之数据保护 3-我的BO之状态控制 4-我的BO之导航属性 数据需要导航 数据之间普遍存在关系,做业务处理时往往也是按照关系在数据之间查询和处理.业务处理可 ...
- Assertion failure in -[UISectionRowData refreshWithSection:tableView:tableViewRowData:]
最近在项目中遇到了 Assertion failure in -[UISectionRowData refreshWithSection:tableView:tableViewRowData:] 这个 ...
- SQL-W3School-函数:SQL 函数
ylbtech-SQL-W3School-函数:SQL 函数 1.返回顶部 1. SQL 拥有很多可用于计数和计算的内建函数. 函数的语法 内建 SQL 函数的语法是: SELECT function ...
- js求数组最大值方法
定义数组 var arr = [-1, 1, 101, -52, 10, 1001, 1001] 1.es6拓展运算符... Math.max(...arr) 2.es5 apply(与方法1原理相同 ...
- Web安全测试检查点
Web安全测试检查点 上传功能 1.绕过文件上传检查功能 2.上传文件大小和次数限制 注册功能 1.注册请求是否安全传输 2.注册时密码复杂度是否后台检验 3.激活链接测试 4.重复注册 5.批量注册 ...
- docker之redis使用
#拉取redis > docker pull redis:latest latest: Pulling from library/redis 8d691f585fa8: Pull complet ...