热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python模拟浏览器登录获取cookie_selenium3.7+python3添加cookie模拟登陆

一、背景介绍最近做一个爬虫项目,用selenium调用浏览器去获取渲染后的源码,但是每次登陆都需要手机验证,这真的是头痛啊,

一、背景介绍

最近做一个爬虫项目,用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','!!!!') # 你的百度账号,密码

如果你支持我,就扫扫我的红包,你领我几毛,我领几毛,也算是对我的支持。



推荐阅读
  • web.py开发web 第八章 Formalchemy 服务端验证方法
    本文介绍了在web.py开发中使用Formalchemy进行服务端表单数据验证的方法。以User表单为例,详细说明了对各字段的验证要求,包括必填、长度限制、唯一性等。同时介绍了如何自定义验证方法来实现验证唯一性和两个密码是否相等的功能。该文提供了相关代码示例。 ... [详细]
  • 如何提高PHP编程技能及推荐高级教程
    本文介绍了如何提高PHP编程技能的方法,推荐了一些高级教程。学习任何一种编程语言都需要长期的坚持和不懈的努力,本文提醒读者要有足够的耐心和时间投入。通过实践操作学习,可以更好地理解和掌握PHP语言的特异性,特别是单引号和双引号的用法。同时,本文也指出了只走马观花看整体而不深入学习的学习方式无法真正掌握这门语言,建议读者要从整体来考虑局部,培养大局观。最后,本文提醒读者完成一个像模像样的网站需要付出更多的努力和实践。 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • 开发笔记:Java是如何读取和写入浏览器Cookies的
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Java是如何读取和写入浏览器Cookies的相关的知识,希望对你有一定的参考价值。首先我 ... [详细]
  • 超级简单加解密工具的方案和功能
    本文介绍了一个超级简单的加解密工具的方案和功能。该工具可以读取文件头,并根据特定长度进行加密,加密后将加密部分写入源文件。同时,该工具也支持解密操作。加密和解密过程是可逆的。本文还提到了一些相关的功能和使用方法,并给出了Python代码示例。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 单点登录原理及实现方案详解
    本文详细介绍了单点登录的原理及实现方案,其中包括共享Session的方式,以及基于Redis的Session共享方案。同时,还分享了作者在应用环境中所遇到的问题和经验,希望对读者有所帮助。 ... [详细]
  • 本文介绍了Windows操作系统的版本及其特点,包括Windows 7系统的6个版本:Starter、Home Basic、Home Premium、Professional、Enterprise、Ultimate。Windows操作系统是微软公司研发的一套操作系统,具有人机操作性优异、支持的应用软件较多、对硬件支持良好等优点。Windows 7 Starter是功能最少的版本,缺乏Aero特效功能,没有64位支持,最初设计不能同时运行三个以上应用程序。 ... [详细]
  • Android实战——jsoup实现网络爬虫,糗事百科项目的起步
    本文介绍了Android实战中使用jsoup实现网络爬虫的方法,以糗事百科项目为例。对于初学者来说,数据源的缺乏是做项目的最大烦恼之一。本文讲述了如何使用网络爬虫获取数据,并以糗事百科作为练手项目。同时,提到了使用jsoup需要结合前端基础知识,以及如果学过JS的话可以更轻松地使用该框架。 ... [详细]
  • 恶意软件分析的最佳编程语言及其应用
    本文介绍了学习恶意软件分析和逆向工程领域时最适合的编程语言,并重点讨论了Python的优点。Python是一种解释型、多用途的语言,具有可读性高、可快速开发、易于学习的特点。作者分享了在本地恶意软件分析中使用Python的经验,包括快速复制恶意软件组件以更好地理解其工作。此外,作者还提到了Python的跨平台优势,使得在不同操作系统上运行代码变得更加方便。 ... [详细]
author-avatar
逝去似水流年
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有