前言
随着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','!!!!') # 你的百度账号,密码
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对的支持。
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
P70系列延期,华为新旗舰将在下月发布
3月20日消息,近期博主@数码闲聊站 透露,原定三月份发布的华为新旗舰P70系列延期发布,预计4月份上市。
而博主@定焦数码 爆料,华为的P70系列在定位上已经超过了Mate60,成为了重要的旗舰系列之一。它肩负着重返影像领域顶尖的使命。那么这次P70会带来哪些令人惊艳的创新呢?
根据目前爆料的消息来看,华为P70系列将推出三个版本,其中P70和P70 Pro采用了三角形的摄像头模组设计,而P70 Art则采用了与上一代P60 Art相似的不规则形状设计。这样的外观是否好看见仁见智,但辨识度绝对拉满。
更新日志
- 林强.1992-春风少年兄【魔岩】【WAV+CUE】
- 世界顶级汽车音响试音王《金色的草原》24K金碟[低速原抓WAV+CUE][1G]
- 周深 /Faouzia《解密 电影原声带》[320K/MP3][39.32MB]
- 周深 /Faouzia《解密 电影原声带》[FLAC/分轨][199.46MB]
- 英雄联盟s14亚军队伍是哪支 英雄联盟s14亚军队伍介绍
- 英雄联盟s14夺冠队伍是哪支 英雄联盟s14夺冠队SKT T1队伍介绍
- faker三冠王是哪几个赛季 faker三冠王赛季介绍
- 岩贵-音乐磁场(AI调音)2CD[WAV]
- 童丽《千愁记旧情》HQII头版限量编号2024[低速原抓WAV+CUE]
- 瑞鸣十五周年纪念3[HQCD限量编号头版][低速原抓WAV+CUE]
- 任天堂专利展示新VR外设:或会随同NS继任机型推出
- 博主制作“Switch 2”模型 与现有掌机对比
- 网友热议IGN为《马路RPG》打5分:要是多元化就能9分了
- 群星《从21世纪安全撤离 电影原声音乐专辑》[320K/MP3][191.19MB]
- 群星《从21世纪安全撤离 电影原声音乐专辑》[FLAC/分轨][592.38MB]