前言

爬虫方向的小伙伴们都知道网页爬虫经常遇到的问题就是登录账户,有些简单的网站我们可以简单的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 登录的更多相关文章

  1. python selenium cookie 登录

    概要: 1.正常登录,使用selenium获取cookie: 2.保存cookie: 3.使用cookie登录. 4.python--2.7,selenium--3.4.1 步骤1 正常登录,使用se ...

  2. Python Selenium Cookie 绕过验证码实现登录

    Python Selenium Cookie 绕过验证码实现登录 之前介绍过博客园的通过cookie 绕过验证码实现登录的方法.这里并不多余,会增加分析和另外一种方法实现登录. 1.思路介绍 1.1. ...

  3. 4 使用Selenium模拟登录csdn,取出cookie信息,再用requests.session访问个人中心(保持登录状态)

    代码: # -*- coding: utf-8 -*- """ Created on Fri Jul 13 16:13:52 2018 @author: a " ...

  4. selenium验证码处理之cookie登录

    在实际测试中会经常见到登录操作需要验证码验证登录 常见验证有以下几种: 验证码登录 图片识别   图片滑块识别验证   4.简单验证码计算 针对上面的登录验证解决办法有以下几种: 1.让开发去掉验证码 ...

  5. 3 使用selenium模拟登录csdn

    之前通过F12开发者模式调试,获取网站后台服务器验证用户名和密码的URL之后,再构造post数据的方式会存在一个问题,就是对目标网站的验证机制不明确,构造post数据除了用户名和密码之外,还可能有更复 ...

  6. 自动化测试: Selenium 自动登录授权,再 Requests 请求内容

    Selenium 自动登录网站.截图及 Requests 抓取登录后的网页内容.一起了解下吧. Selenium: 支持 Web 浏览器自动化的一系列工具和库的综合项目. Requests: 唯一的一 ...

  7. JMeter学习-018-JMeter 配置元件之-HTTP信息头管理器-实现 Cookie 登录

    之前写过一篇通过[HTTP Cookie管理器]实现登录态操作的文章,使用时需要配置每个键值对(如下图所示),相对来讲配置比较繁琐.其实,我们也可通过在[HTTP信息头管理器]添加 Cookie 信息 ...

  8. JMeter学习-012-JMeter 配置元件之-HTTP Cookie管理器-实现 Cookie 登录

    前文我们讲过了若何获取登录后的 Cookie 信息,不知如何获取登录 Cookie 的朋友,敬请参阅我之前写的博文:Fiddler-005-获取 Cookie 信息.参阅上篇文章,获取到 Cookie ...

  9. Asp.Net Core 2.0 项目实战(10) 基于cookie登录授权认证并实现前台会员、后台管理员同时登录

    1.登录的实现 登录功能实现起来有哪些常用的方式,大家首先想到的肯定是cookie或session或cookie+session,当然还有其他模式,今天主要探讨一下在Asp.net core 2.0下 ...

随机推荐

  1. LogStash安装使用

    1.下载LogStash的rpm包: wget https://artifacts.elastic.co/downloads/logstash/logstash-7.4.2.rpm 2. 安装elas ...

  2. Eclipse中Git的操作

    一.工程初始化为本地库 工程→右键→Team→Share Project→Git 点击Finish即可 二.Eclipse 中忽略不必追踪控制的文件 列如: .classpath 文件 .projec ...

  3. Go by Example-常量

    Go by Example 中文:常量 在上一节中提到了变量,常用的有两种定义的方式使用var或者短变量的形式进行定义,这节我们来说常量. 常量 常量是指程序运行时不可改变的值,常量必须初始化值,定义 ...

  4. Synchronized 有几种用法

    我们都知道 Synchronized 是线程安全同步用的,大部分程序可能只会用到同步方法上面.其实 Synchronized 可以用到更多的场合,栈长列举了以下几个用法. 1.同步普通方法 这个也是我 ...

  5. 2018-2019-2 20165312《网络攻防技术》Exp7 网络欺诈防范

    2018-2019-2 20165312<网络攻防技术>Exp7 网络欺诈防范 目录 一.相关知识点总结 二.实验内容 三.实验步骤 四.实验总结及问题回答 五.实验中遇到的问题及解决方法 ...

  6. 微信小程序侧边栏滑动特效(左右滑动)

    侧边栏滑动是很常见的功能,但是小程序出来不久,很多特效还没有成熟案例,只能原生重写,所以今天为大家带来4个漂亮的侧边栏特效~~ 侧边栏特效一 先看效果: wxml: <!--page/one/i ...

  7. Linux后台运行任务

    [Linux]ssh命令行下多任务前后台切换 原文:https://my.oschina.net/huxuanhui/blog/13844 我们都知道,在 Windows 上面,我们要么让一个程序作为 ...

  8. FM与FFM深入解析

    因子机的定义 机器学习中的建模问题可以归纳为从数据中学习一个函数,它将实值的特征向量映射到一个特定的集合中.例如,对于回归问题,集合 T 就是实数集 R,对于二分类问题,这个集合可以是{+1,-1}. ...

  9. linux下查看memcache是否正常

    1   查看memcache启动1.1      在xshell中查看memcache是否启动在xshell中输入ps -ef | grep mem,显示结果如下,说明memcache已经启动. [r ...

  10. 蜜汁头文件&&slow slow read

    slow slow read 板子 inline int read() { ; char last=' ',ch=getchar(); ') last=ch,ch=getchar(); +ch-',c ...