selenium webdriver如何添加cookie
1|0一. webdriver中常用的cookie方法
webdriver中提供了操作cookie的相关方法:
-
get_cookies() 获得cookie信息
-
add_cookie(cookie_dict) 添加cookie
-
delete_cookie(name) 删除特定(部分)的cookie
-
delete_all_cookies() 删除所有的cookie
2|0二. add_cookie()的用法
2|11. 源码中的解释
源码中简略的向我们展示了如何添加cookie,源码如下:
从中可以看出add_cookie()这个函数有一个参数cookie_dict,它是以字典的形式传入的,字典中必选的键是"name"和"value",可选的键是"path", "domin", "secure", "expiry",其实源码中还漏了一个:"httponly"
2|22. cookie中键名的含义
这些键名都代表什么意思呢?参考博文《selenium3.7+ python3 添加cookie模拟登陆》,罗列如下
-
name:cookie的名称
-
value:cookie对应的值,动态生成的
-
domain:服务器域名
-
expiry:Cookie有效终止日期
-
path:Path属性定义了Web服务器上哪些路径下的页面可获取服务器设置的Cookie
-
httpOnly:防脚本攻击
-
secure:在Cookie中标记该变量,表明只有当浏览器和Web Server之间的通信协议为加密认证协议时
3|0三. 实例(以课堂派的登录为例)
3|1第一步:我们先手工做一次登录,打开chrome的调试工具(F12),选择Network—Preserve log—XHR
3|2第二步:点击登录,打开调试工具中的login,可以看到右边Response Headers下面就出现了服务器返回给浏览器的cookie
3|3第三步:python代码的实现,最容易出现问题的可能是这一步
运行结果后发现报错了:Message: unable to set cookie
3|4第四步:修改代码,解决问题
这篇标题很长的文章给我们提供了一个解决方案——《Selenium: Trying to log in with cookies and get the errorMessage - “Can only set cookies for current domain” or "Unable to set Cookie"》
"技术提示:必须首先加载网站,这样Selenium 才能知道cookie 属于哪个网站,即使加载网站的行为对我们没任何用处"
只需要给原来的代码加上一句(红色部分),这个url填"https://www.ketangpai.com/User/login.html"或"https://www.ketangpai.com/Main/index.html"都行,只要是同一个domain就行,浏览器会自动跳转到登录页面:
再次运行,发现已经成功了
4|0四. 获取cookie的方法不止一种
cookie的可以通过浏览器调试来获取,当然也可以通过抓包工具获取,那么能不能用代码来获取呢?答案是肯定的
参照上面那篇博文,我们完成以下代码,第一次通过driver1发送用户名和密码登录,获取cookie并保存,第二次driver2添加driver1保存的cookie,达到绕过登录的目录
注意:cookie有两种,一种是会话级别的,一种是有有效期的,会话级别的cookie就不能用add_cookie的方法了,因为一次会话过程(从打开浏览器到关闭浏览器,断开连接)结束后它就失效了
5|0参考文章
https://www.cnblogs.com/CoolJayson/p/7421013.html
https://www.cnblogs.com/huangguifeng/p/7858619.html
https://stackoverflow.com/questions/48562253/webdrivererror-unable-to-set-cookie-javascript
__EOF__

本文链接:https://www.cnblogs.com/my_captain/p/9260373.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?