利用selenium 3.7和python3添加cookie模拟登陆的实现
作者:地球守卫者 发布时间:2021-05-10 04:15:02
前言
随着Python3的普及,Selenium3也跟上了行程。而Selenium3最大的变化是去掉了Selenium RC,另外就是Webdriver从各自浏览器中脱离,必须单独下载。本文就来介绍了关于selenium 3.7+python3实现添加cookie模拟登陆的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。
一、背景介绍
最近做一个爬虫项目,用selenium调用浏览器去获取渲染后的源码,但是每次登陆都需要手机验证,这真的是头痛啊,这种验证方式不要想着去破解,还是老老实实用手机收验证码去吧!反正我是不知道这种验证方式还能破解!难道就没有其他办法了吗?
有,那就是模拟登陆!这样最起码不用没测试一次就登陆验证一次。
这里要说一下的就是,网上很多关于webdriver 添加cookie的教程,基本百分之80都是有问题的。反正我是找了N多的帖子都没有一个是正确的。
二、 添加cookie方法:driver.add_cookie()
1.add_cookie(cookie_dict)
方法里面参数是cookie_dict,说明里面参数是字典类型。
2.add_cookie源码。
从源码中我们可以看出,add_cookie方法接受一个字典,字典中包含name,value,path,domain,secure,expiry,但是这个源码容易误导人,那就是cookie参数没有给全。
网上很多教程给的代码cookie参数是没给够的,根本就跑不起来。
3. add_cookie接收的字典格式。
正确的格式:
cookie = {
# "domain": ".58.com", #Firefox浏览器不能写domain,如果写了会报错,谷歌需要写否则也是报错,这里就是一个坑。其他浏览器没测试不知道情况。
'name': name,
'value': value,
"expires": "",
'path': '/',
'httpOnly': False,
'HostOnly': False,
'Secure': False,
}
name:cookie的名称
value:cookie对应的值,动态生成的
domain:服务器域名
expiry:Cookie有效终止日期
path:Path属性定义了Web服务器上哪些路径下的页面可获取服务器设置的Cookie
httpOnly:防脚本攻击
secure:在Cookie中标记该变量,表明只有当浏览器和Web Server之间的通信协议为加密认证协议时
为什么要构造成这样子,其实我们看下浏览器保存的cookie格式就明白了。下图就是谷歌浏览器的cookie 的截图。
三 ,我们举个例子看下是否真的写成功了:
第一次访问的的时候去获取名字叫hello的cookie 是没有的,add_cookie后再去访问,第二次访问就拿到了hello。说明已经写进去了。
四、项目实战。
能不能用?好不好用?怎么用?,用项目来说话,模拟登陆百度。!
目标:
1.手动登录一次后,只要在cookie 有效期内无需重复登录。
2.访问浏览记录。
示例代码
#!coding=utf-8
import time
from selenium import webdriver
import pickle
class BaiduSpider(object):
def __init__(self,username,password):
self.username = username
self.password = password
self.driver = webdriver.Chrome()
self.driver.get(url='http://www.baidu.com')
self.set_cookie()
self.is_login()
def is_login(self):
'''判断当前是否登陆'''
self.driver.refresh()
html = self.driver.page_source
if html.find(self.username) == -1: #利用用户名判断是否登陆
# 没登录 ,则手动登录
self.login()
else:
#已经登录 尝试访问搜索记录,可以正常访问
self.driver.get(url='http://i.baidu.com/my/history')
time.sleep(30) # 延时看效果
def login(self):
'''登陆'''
time.sleep(60) #等待手动登录
self.driver.refresh()
self.save_cookie()
def save_cookie(self):
'''保存cookie'''
# 将cookie序列化保存下来
pickle.dump(self.driver.get_cookies(), open("cookies.pkl", "wb"))
def set_cookie(self):
'''往浏览器添加cookie'''
'''利用pickle序列化后的cookie'''
try:
cookies = pickle.load(open("cookies.pkl", "rb"))
for cookie in cookies:
cookie_dict = {
"domain": ".baidu.com", # 火狐浏览器不用填写,谷歌要需要
'name': cookie.get('name'),
'value': cookie.get('value'),
"expires": "",
'path': '/',
'httpOnly': False,
'HostOnly': False,
'Secure': False}
self.driver.add_cookie(cookie_dict)
except Exception as e:
print(e)
if __name__ == '__main__':
BaiduSpider('usename','!!!!') # 你的百度账号,密码
来源:http://www.cnblogs.com/huangguifeng/p/7858619.html


猜你喜欢
- 数组编程使用Numpy数组可以使你利用简单的数组表达式完成多项数据操作任务,而不需要编写大量的循环,这个极大的帮助了我们高效的解决问题。我们
- 问题背景两张表一张是用户表a(主键是int类型),一张是用户具体信息表b(用户表id字段是varchar类型)。因为要显示用户及用户信息,所
- pycharm一般安装完毕,就是默认是自动保存的,但是......但是....既然是程序,既然是软件,就难免出现bug。也许会 * 友出现头天
- 世上无难事,只要找到 Homebrew 的正确安装方式。Homebrew 是什么Homebrew是 mac的包管理器,仅需执行相应的命令,就
- JDBC连接MySQL数据库关键的四个步骤1、查找驱动程序MySQL目前提供的Java驱动程序为Connection/J,可以从MySQL官
- 路由跳转了但界面不显示没有在父路由加上router-view,加上下面的代码即可。<!-- 路由匹配到的组件将显示在这里 -->
- Python argparse中的action=store_true用法前言Python的命令行参数解析模块学习。示例参数解析模块支持act
- python2.7在内存管理上相比python3还是有些坑的,其释放后的内存仍然保留在python的内存池中,不被系统所用。python循环
- 1、 数据库闭包表简介像MySQL这样的关系型数据库,比较适合存储一些类似表格的扁平化数据,但是遇到像树形结构这样有深度的数据,就很难驾驭了
- vue router路由嵌套不显示问题的解决方法,具体内容如下路由嵌套,vue2.0 router中嵌套路由不成功,如何解决?我先说下我的需
- 举例说明: 在Windows环境下:原本在php4.3.0中运行正常的程序,在4.3.1中为何多处报错,大体提示为:Notice:Undef
- 1. 引言在某些场景下,我们不仅需要进行实时人脸检测追踪,还要进行再加工;这里进行摄像头实时人脸检测,并对于实时检测的人脸进行初步提取;单个
- 一:区别:1、var声明的变量属于函数作用域,而let和const声明的变量属于块级作用域;(js作用域在上篇文章) 2、var声
- 目录概述索引数据结构二叉树红黑树B-TreeB+TreeHash索引InnoDB 索引实现(聚集)索引文件和数据文件是分离的(非聚集)聚集索
- 程序测试是展现BUG存在的有效方式,但令人绝望的是它不足以展现其缺位。——艾兹格·迪杰斯特拉(Edsger W. Dijkstra)算法审查
- 在SQL Server中,TempDB主要负责供下述三类情况使用:内部使用(排序、hash join、
- 原理形态学是图像处理中常见的名词,图像处理的形态学基本属于数学形态学的范畴,是一门建立在格论和拓扑学基础上的图像分析学科。黑帽运算是结合了腐
- 对于比较长的数字组成的字符串,我们一般会用逗号(,)隔开来格式化数字,从右往左每三个数字用一个逗号分组隔开。为什么要用逗号隔开数字呢?因为当
- 本文实例讲述了python类和继承定义与用法。分享给大家供大家参考。具体如下:class Employee: passlee =
- 目录背景分析数据模拟1、创建两个表:员工表和部门表2、创建两个函数:生成随机字符串和随机编号3、编写存储过程,模拟500W的员工数据4、编写