利用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源码。

利用selenium 3.7和python3添加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 的截图。

利用selenium 3.7和python3添加cookie模拟登陆的实现

三 ,我们举个例子看下是否真的写成功了:

利用selenium 3.7和python3添加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

标签:python,selenium,模拟登陆
0
投稿

猜你喜欢

  • Python +Selenium解决图片验证码登录或注册问题(推荐)

    2022-12-30 05:41:51
  • go语言的工作空间和GOPATH环境变量介绍

    2024-05-09 10:11:34
  • Python全角与半角之间相互转换的方法总结

    2023-12-25 03:50:50
  • 关于Pandas count()与values_count()的用法及区别

    2021-09-25 08:28:20
  • keras自定义损失函数并且模型加载的写法介绍

    2023-06-23 04:00:30
  • 利用Tensorflow的队列多线程读取数据方式

    2021-12-24 17:32:30
  • Python计算已经过去多少个周末的方法

    2023-03-10 11:40:52
  • MySql索引原理与操作

    2024-01-28 22:27:31
  • MySQL安装starting the server失败的2种解决办法(推荐!)

    2024-01-28 11:16:09
  • 教你如何在SQL Server数据库中加密数据

    2009-09-10 14:49:00
  • Python 3.6 中使用pdfminer解析pdf文件的实现

    2023-09-02 08:34:08
  • MySQL优化之如何查找SQL效率低的原因

    2024-01-12 21:03:55
  • Python中使用asyncio 封装文件读写

    2022-11-13 03:18:12
  • JavaScript让Textarea支持tab按键的方法

    2024-05-05 09:15:00
  • 在HTML中,常见的URL有多种表示方式:

    2009-07-28 12:18:00
  • python制作websocket服务器实例分享

    2023-02-20 00:00:29
  • pyqt5 QScrollArea设置在自定义侧(任何位置)

    2023-05-22 09:33:51
  • sqlserver2017共享功能目录路径不可改的解决方法

    2024-01-17 13:58:26
  • UTF-8 编码中BOM的检测与删除

    2022-06-04 07:44:16
  • MySQL中or、in、union与索引优化详析

    2024-01-18 08:21:55
  • asp之家 网络编程 m.aspxhome.com