原址: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'

不同的,所以想要同时能登录,每个域名都得保持下来

'.pan.baidu.com'

python selenium 使用cookies免登陆,与requests使用cookies免登陆的差别相关推荐

  1. 利用python+selenium爬取derwent数据库上的patents

    利用python+selenium爬取derwent数据库上的patents 需求: 登陆web of science,并进入derwent数据库,按照公司excel列表依次进行搜索,并将所有搜索道德 ...

  2. python+selenium获取cookie session_Python Selenium模拟登录成功后,使用此cookie、利用requests库进行get时,提示“非法登陆”。...

    一. 步骤概述 a. 模拟登录学校选课系统(使用Selenium库登陆http://xk.suibe.edu.cn/xsxk/login.xk) b. 取得cookie后传入requests的sess ...

  3. php selenium模拟登陆,python+selenium自动化实战携带cookies模拟登陆微博

    首先获取cookies,使用手机扫码登录斗鱼,然后利用网页cookies保存在本地 有些同学可能会问,这不是相当于自己登录了吗,还模拟什么呢,其实来说这是一次获取cookies可以使用很久 #!/us ...

  4. python selenium爬虫豆瓣_使用selenium+requests爬取豆瓣小组讨论列表

    获取本文代码 · 我的GitHub 注:这个项目的代码会在我的GitHub持续优化.更新,而在本文中的代码则是最初版本的代码. 豆瓣小组 豆瓣有一个"小组"模块,有一些小组中会发布 ...

  5. python+selenium+phantomjs 模拟淘宝登陆

    一段时间前,微信群里有小伙伴在问如何模拟登陆淘宝.对于这样的需求我很乐意折腾,我也在网上看了一些大神写的,不用第三方组件,"纯模拟"实现的难度太大了,各种参数,可见淘宝安全机制且高 ...

  6. Python+selenium 自动化-读取excel记录的脚本执行登陆操作实战演示

    我们可以用 excel 来记录自动化,然后读取 excel 来执行命令,excel 可以很方便直观的管理我们录入的自动化.下面给大家演示一下 Python+selenium 自动化的实例,读取 exc ...

  7. socket模拟http的登陆_利用 Python + Selenium 实现自动登陆签到

    工具是人手的延伸,用的好了,它可以成为我们身体的一部分,用不好,它就只是别人身体的一部分. 这是众所周知的道理,但是落实到每个人的具体实践上却是千差外别. 比如我们熟悉的 web 自动化测试工具 Se ...

  8. python京东自动签到_利用python Selenium实现自动登陆京东签到领金币功能

    如何自动登陆京东? 我们先来看一下京东的登陆页面,如下图所示: [插入图片,登陆页面] 登陆框就是右面这一个框框了,但是目前我们遇到一个困呐,默认的登陆方式是扫码登陆,如果我们想要以用户民个.密码的形 ...

  9. selenium模拟登陆豆瓣并获取cookies

    验证码处理与模拟登陆豆瓣,首先我们看到豆瓣没有cookies,我们需要用程序来模拟登陆获取cookies(当前有些情况下自己手动登陆后复制粘贴cookies也能登陆),该文主要讲方法,如何用selen ...

最新文章

  1. 张一鸣、王欣、罗永浩三家对垒微信,张小龙如何应对?
  2. Mol Plant | 中科院遗传与发育生物学研究所周俭民课题组报道了细菌效应蛋白在植物细胞内诱导免疫受体ZAR1寡聚的新发现...
  3. LARS 最小角回归算法简介
  4. android 动态获取全县_省市县 ------ 三级滚动(android)
  5. SciPy 非线性方程求解 | Python技能树征题
  6. App_Code 目录
  7. 关于小米Ruby15.6笔记本驱动黑苹果博通蓝牙的补充
  8. go语言 mysql时间对比_go时间比较 - Go语言中文网 - Golang中文社区
  9. Leetcode 739. Daily Temperatures
  10. 自动化运维工具-ansible入门(一)
  11. 2021秋软工实践第二次结对编程作业
  12. 在vsphere client 给esxi上的虚拟机增加U盘识别
  13. Techo TVP物联网开发者峰会青润的总结
  14. win7系统安装VS 2019
  15. matlab实现正弦内插算法(低通滤波)
  16. fatal: unable to connect to gitee.com: gitee.com[0: 180.97.125.228]: errno=Unknown error
  17. php读取excel并导入数据,PHPExcel读取excel并导入数据库
  18. 经纬度与UTM(Universal Transverse Mercator Projector:通用横轴卡墨托投影)的坐标变换代码
  19. 蓝桥杯-发现环(python-简单Tarjan算法)
  20. 读书笔记-深度学习推荐系统4-推荐与embedding

热门文章

  1. 中继(负载均衡)工作原理
  2. 使用spring boot拦截器实现青少年模式
  3. 美国人易得冠心病 日本人易得肠胃病?性格决定疾病
  4. [图床] 使用腾讯云轻量服务器 + 腾讯云 CDN 搭建 Chevereto 图床和加速分发方案
  5. CDH 5.14.2 安装部署指南
  6. QPushbutton设置icon和文字 (文字在图标下方)
  7. 无刷无霍尔BLCD电机控制
  8. Covariate Shift
  9. C++ --- 静态数据成员
  10. 中国艺术《浮光掠影》孙溟㠭书画作品