python selenium 使用cookies免登陆,与requests使用cookies免登陆的差别
原址:https://blog.csdn.net/qq_38282706/article/details/80639803
要点:1.selenium的cookies是多个字典组成的list,而且有很多键值
2.selenium 想要添加cookies,得先登录对应域名的网址,再添加,一旦cookies里有不同域名(domain)就会报错!
3.requests的cookies只需name跟value即可
最近研究用selenuim 登录纯JS加载的网站获取信息,到后面想用cookies免登录时,发现selenium跟requests 使用cookies的一些差别
用selenuim登录网站后,driver.get_cookies()就会得到此时的cookies,注意,这是多个dict组成的list
登录企名片(http://auth.qimingpian.com/finos.html)后cookies的内容如下:
cookies=\ [ {'domain': '.vip.qimingpian.com', 'path': '/', 'httpOnly': False, 'name': 'userinfo', 'expiry': None, 'secure': False, 'value': '{%22nickname%22:%22%E5%81%A5%EB%88%88_%EB%88%88%22%2C%22headimgurl%22:%22http://img1.qimingpian.com/wximg/171351ea5349c8c3723c808b048ba818.jpg%22%2C%22coin%22:%2250%22%2C%22applySubmit%22:%220%22%2C%22team_flag%22:%220%22%2C%22team_uuid%22:%22%22%2C%22vip_out_date%22:%22%22%2C%22usernum%22:%22864636697%22%2C%22team_enterprise%22:%220%22%2C%22enterprise_coin%22:%220%22%2C%22is_admin%22:%220%22%2C%22is_manager%22:%220%22%2C%22first_shenqing%22:%220%22%2C%22phone%22:%2213630499459%22%2C%22apply_phone%22:%2213630499459%22%2C%22scope%22:%22qmp%22%2C%22apply_state%22:3%2C%22liyou%22:%22%22%2C%22is_certify%22:0%2C%22ip%22:%22183.2.90.153%22%2C%22person_role%22:%22%22%2C%22claim_type%22:0%2C%22expireinfo%22:false%2C%22inneruser%22:false}'}, {'domain': '.qimingpian.com', 'path': '/', 'httpOnly': False, 'name': 'time_token', 'expiry': 1529368822, 'secure': False, 'value': '1528504828414'}, {'domain': '.vip.qimingpian.com', 'path': '/', 'httpOnly': False, 'name': 'Hm_lvt_1e712c5331439bcf163b46f3d208f00b', 'expiry': 1560040822, 'secure': False, 'value': '1528191935,1528192457,1528504823'}, {'domain': '.vip.qimingpian.com', 'path': '/', 'httpOnly': False, 'name': 'Hm_lpvt_1e712c5331439bcf163b46f3d208f00b', 'expiry': None, 'secure': False, 'value': '1528504823'}, {'domain': 'vip.qimingpian.com', 'path': '/', 'httpOnly': False, 'name': '102921|0|0|9|1|1|', 'expiry': 1528504833, 'secure': False, 'value': '102921%7C0%7C0%7C9%7C1%7C1%7C'}, {'domain': '.qimingpian.com', 'path': '/', 'httpOnly': False, 'name': 'unionid', 'expiry': 1529368823, 'secure': False, 'value': 'HYSyhBeZG1C9ydWJCU9/LhfTok2z/lioTdcZ4Td+LyS3oTbOlCL1akRJTwSrhAldeJWqqIs6kiQsM8IbOYgM5A=='}, {'domain': 'vip.qimingpian.com', 'path': '/', 'httpOnly': False, 'name': 'userinfo', 'expiry': None, 'secure': False, 'value': '{%22nickname%22:%22%E5%81%A5%EB%88%88_%EB%88%88%22%2C%22headimgurl%22:%22http://img1.qimingpian.com/wximg/171351ea5349c8c3723c808b048ba818.jpg%22%2C%22coin%22:%2250%22%2C%22applySubmit%22:%220%22%2C%22team_flag%22:%220%22%2C%22team_uuid%22:%22%22%2C%22vip_out_date%22:%22%22%2C%22usernum%22:%22864636697%22%2C%22team_enterprise%22:%220%22%2C%22enterprise_coin%22:%220%22%2C%22is_admin%22:%220%22%2C%22is_manager%22:%220%22%2C%22first_shenqing%22:%220%22%2C%22phone%22:%2213630499459%22%2C%22apply_phone%22:%2213630499459%22%2C%22scope%22:%22qmp%22%2C%22apply_state%22:3%2C%22liyou%22:%22%22%2C%22is_certify%22:0%2C%22ip%22:%22113.93.105.10%22%2C%22person_role%22:%22%22%2C%22claim_type%22:0%2C%22expireinfo%22:false%2C%22inneruser%22:false%2C%22apply_pro_state%22:3}'}, ]
#可以看到,每个字典有多个键,它们的含义是:
name: cookie的名称
value: cookie对应的值,动态生成的
domain: 服务器域名
expiry: cookie有效终止日期
path: Path属性定义了Web服务器上哪些路径下的页面可获取服务器设置的cookie
httpOnly: 防脚本攻击
secure: 在cookie中标记该变量,表明只有当浏览器和Web Server之间的通信协议为加密认证协议时(当前即https),浏览器才向服务器提交相应的cookie
那好,得到了cookies后,再次用selenium登录,直接用for in循环加driver.add_cookie(cookie)就搞定了吧!
错错!!此时会弹出错误:
selenium.common.exceptions.InvalidCookieDomainException: Message: Cookies may only be set for the current domain (auth.qimingpian.com)
请看看domain:4个带vip,2个是不带vip的,域名不同,所以报错,琢磨了下,我改为这样,
driver.get('http://auth.qimingpian.com/finos.html') for i in cookies: if i['domain'][1:] in driver.current_url: driver.add_cookie(i)driver.get('http://vip.qimingpian.com/#/finos/investment/ishijian') for i in cookies: if i['domain'][1:] in driver.current_url: driver.add_cookie(i)driver.refresh()
ok!此时登录成功,特别说明下,selenium添加cookies时,得先登录网址才能添加cookies的
====================================================================================
上面是利用之前selenium登录后的cookies 再次到selenium上免登陆进入网页的,那么能用requests登录吗?
答案是肯定的,需要注意的是,requests的cookies只需name跟value
写法如下:
cookies1={} for cookie in cookies: cookies1[cookie['name']]=cookie['value']
cookies1={ 'time_token': '1528504828414', 'Hm_lpvt_1e712c5331439bcf163b46f3d208f00b': '1528504823', 'Hm_lvt_1e712c5331439bcf163b46f3d208f00b': '1528191935,1528192457,1528504823', 'unionid': 'HYSyhBeZG1C9ydWJCU9/LhfTok2z/lioTdcZ4Td+LyS3oTbOlCL1akRJTwSrhAldeJWqqIs6kiQsM8IbOYgM5A==', 'userinfo': '{%22nickname%22:%22%E5%81%A5%EB%88%88_%EB%88%88%22%2C%22headimgurl%22:%22http://img1.qimingpian.com/wximg/171351ea5349c8c3723c808b048ba818.jpg%22%2C%22coin%22:%2250%22%2C%22applySubmit%22:%220%22%2C%22team_flag%22:%220%22%2C%22team_uuid%22:%22%22%2C%22vip_out_date%22:%22%22%2C%22usernum%22:%22864636697%22%2C%22team_enterprise%22:%220%22%2C%22enterprise_coin%22:%220%22%2C%22is_admin%22:%220%22%2C%22is_manager%22:%220%22%2C%22first_shenqing%22:%220%22%2C%22phone%22:%2213630499459%22%2C%22apply_phone%22:%2213630499459%22%2C%22scope%22:%22qmp%22%2C%22apply_state%22:3%2C%22liyou%22:%22%22%2C%22is_certify%22:0%2C%22ip%22:%22113.93.105.10%22%2C%22person_role%22:%22%22%2C%22claim_type%22:0%2C%22expireinfo%22:false%2C%22inneruser%22:false%2C%22apply_pro_state%22:3}', '102921|0|0|9|1|1|': '102921%7C0%7C0%7C9%7C1%7C1%7C' }
此时requests.get(url, cookies =cookies1, headers =headers) 即可
不过,如果你想反过来,用request的cookies在selenium上登陆,那是不行的!因为domain得指定!!
=========================================================================
在研究selenium登录百度时,发现很蛋疼的事,原来百度的cookies是不通用的!
百度首页:https://www.baidu.com/
百度贴吧:https://tieba.baidu.com
百度网盘:https://pan.baidu.com/
如果你用selenium登录了百度首页,然后把cookies保存下来,用此cookies是不能直接登录贴吧跟网盘的!不过网盘跟贴吧的倒可以直接登录首页。
原因出自哪里呢?原来还是domain! 贴吧是'.tieba.baidu.com' 网盘是'.pan.baidu.com'
不同的,所以想要同时能登录,每个域名都得保持下来
python selenium 使用cookies免登陆,与requests使用cookies免登陆的差别相关推荐
- 利用python+selenium爬取derwent数据库上的patents
利用python+selenium爬取derwent数据库上的patents 需求: 登陆web of science,并进入derwent数据库,按照公司excel列表依次进行搜索,并将所有搜索道德 ...
- python+selenium获取cookie session_Python Selenium模拟登录成功后,使用此cookie、利用requests库进行get时,提示“非法登陆”。...
一. 步骤概述 a. 模拟登录学校选课系统(使用Selenium库登陆http://xk.suibe.edu.cn/xsxk/login.xk) b. 取得cookie后传入requests的sess ...
- php selenium模拟登陆,python+selenium自动化实战携带cookies模拟登陆微博
首先获取cookies,使用手机扫码登录斗鱼,然后利用网页cookies保存在本地 有些同学可能会问,这不是相当于自己登录了吗,还模拟什么呢,其实来说这是一次获取cookies可以使用很久 #!/us ...
- python selenium爬虫豆瓣_使用selenium+requests爬取豆瓣小组讨论列表
获取本文代码 · 我的GitHub 注:这个项目的代码会在我的GitHub持续优化.更新,而在本文中的代码则是最初版本的代码. 豆瓣小组 豆瓣有一个"小组"模块,有一些小组中会发布 ...
- python+selenium+phantomjs 模拟淘宝登陆
一段时间前,微信群里有小伙伴在问如何模拟登陆淘宝.对于这样的需求我很乐意折腾,我也在网上看了一些大神写的,不用第三方组件,"纯模拟"实现的难度太大了,各种参数,可见淘宝安全机制且高 ...
- Python+selenium 自动化-读取excel记录的脚本执行登陆操作实战演示
我们可以用 excel 来记录自动化,然后读取 excel 来执行命令,excel 可以很方便直观的管理我们录入的自动化.下面给大家演示一下 Python+selenium 自动化的实例,读取 exc ...
- socket模拟http的登陆_利用 Python + Selenium 实现自动登陆签到
工具是人手的延伸,用的好了,它可以成为我们身体的一部分,用不好,它就只是别人身体的一部分. 这是众所周知的道理,但是落实到每个人的具体实践上却是千差外别. 比如我们熟悉的 web 自动化测试工具 Se ...
- python京东自动签到_利用python Selenium实现自动登陆京东签到领金币功能
如何自动登陆京东? 我们先来看一下京东的登陆页面,如下图所示: [插入图片,登陆页面] 登陆框就是右面这一个框框了,但是目前我们遇到一个困呐,默认的登陆方式是扫码登陆,如果我们想要以用户民个.密码的形 ...
- selenium模拟登陆豆瓣并获取cookies
验证码处理与模拟登陆豆瓣,首先我们看到豆瓣没有cookies,我们需要用程序来模拟登陆获取cookies(当前有些情况下自己手动登陆后复制粘贴cookies也能登陆),该文主要讲方法,如何用selen ...
最新文章
- linux shell中文显示
- 用python画简单的动物-如何用python画简单的动物
- 401 - 未授权: 由于凭据无效,访问被拒绝。
- 一个简单的反射拷贝一份新的实体类
- idea下的调试配置
- 进阶攻略|前端最全的框架总结
- 如何集成Python代码和GUI来创建一个简单的游戏?
- Linux内存管理:反向映射机制(匿名页,文件页和ksm页)
- python numba 转灰度图_Python数据预处理:Dask和Numba并行化加速!
- Keil MDK下载程序时的相关设置
- 在VB中使用Linq To SQLite注意事项
- VNCTF2021[WEB]
- 计算机端口 串口 并口是什么,那些年我们使用的电脑串行,并行接口,你们是否还记得?...
- 关于打开CMD窗口一闪而退的解决方法
- python调用百度地图实现导航_利用python和百度地图API实现数据地图标注
- 苹果 Mac Big Sur 如何更改锁屏时间?
- 1208:2的幂次方表示
- OpenGL导入3DS专题
- Java五子棋(2)
- ubuntu查看电脑配置命令
热门文章
- git错误10054
- Vasya And Array
- vxe-table 虚拟树、树形表格的使用
- excel表格下载,并设置填充色
- 你知道什么是人货场模型吗
- pandas追加写入excel_快速介绍Python数据分析库pandas的基础知识和代码示例
- PCB设计---铜箔类型(二)
- 【阿里云高校计划】车辆保险应用 day4 【拨云见日】
- 多点温度采集系统设计c语言,单片机多点(八路)DS18B20温度采集系统仿真与源码...
- error: expected ‘=‘, ‘,‘, ‘;‘, ‘asm‘ or ‘__attribute__‘ before ‘{‘ token 错误问题