selenium模拟登陆豆瓣

本文介绍了如何利用selenium获取cookies,然后将这些cookies应用到selenium和requests库中实现免登录访问网站。重点包括:1) 通过selenium的get_cookies()方法获取cookies;2) 将cookies传递给selenium进行模拟登录;3) 转换cookies格式以适应requests库的使用。在操作过程中,注意requests仅需name和value,且避免在设置cookies前关闭浏览器。
摘要由CSDN通过智能技术生成

使用selenium模拟登陆豆瓣,利用获得cookies传给selenium和requests进行免登录访问

1、得到cookies

通过selenium中的browser.get_cookies()方法获得的cookies格式为多个字典组成的列表形式:

[{'domain': '.douban.com', 'expiry': 1596722274.347481, 'httpOnly': False, 'name': 'bid', 'path': '/', 'secure': False, 'value': 'Bfp6usE2Vx0'}, {'domain': 'www.douban.com', 'expiry': 1596722284, 'httpOnly': False, 'name': '__yadk_uid', 'path': '/', 'secure': False, 'value': '5Wk1JfNy3io5MOLLDeoM5Abie89zRwvI'}, {'domain': '.douban.com', 'httpOnly': True, 'name': 'dbcl2', 'path': '/', 'secure': False, 'value': '"201271076:Y357bxbR6K8"'}, {'domain': '.douban.com', 'httpOnly': False, 'name': 'ck', 'path': '/', 'secure': False, 'value': 'oqhv'}, {'domain': '.douban.com', 'expiry': 1565193476, 'httpOnly': False, 'name': 'ap_v', 'path': '/', 'secure': False, 'value': '0,6.0'}, {'domain': 'www.douban.com', 'expiry': 1580954281, 'httpOnly': False, 'name': '_pk_ref.100001.8cb4', 'path': '/', 'secure': False, 'value': '%5B%22%22%2C%22%22%2C1565186281%2C%22https%3A%2F%2Faccounts.douban.com%2Fpassport%2Flogin%22%5D'}, {'domain': 'www.douban.com', 'expiry': 1565188081, 'httpOnly': False, 'name': '_pk_ses.100001.8cb4', 'path': '/', 'secure': False, 'value': '*'}, {'domain': 'www.douban.com', 'expiry': 1628258281, 'httpOnly': False, 'name': '_pk_id.100001.8cb4', 'path': '/', 'secure': False, 'value': 'dde054266730f26c.1565186281.1.1565186281.1565186281.'}, {'domain': '.douban.com', 'expiry': 1567778284, 'httpOnly': False, 'name': 'push_noty_num', 'path': '/', 'secure': False, 'value': '0'}, {'domain': '.douban.com', 'expiry': 1567778284, 'httpOnly': False, 'name': 'push_doumail_num', 'path': '/', 'secure': False, 'value': '0'}]

可以看到每个字典有多个键,它们的含义是:
domain: 服务器域名
expiry:cookies过期时间
httpOnly:防脚本攻击
name:cookie的名称
path:Path属性定义了Web服务器上哪些路径下的页面可获取服务器设置的cookie
secure:在cookie中标记该变量,表明只有当浏览器和Web Server之间的通信协议为加 密认证协议时(当前即https),浏览器才向服务器提交相应的cookie
value:cookie对应的值,动态生成的

2、传cookies给selenium

由于得到的cookies是由多个字典组成的列表,那么遍历列表得到的每个字典再分别添加到selenium要访问网页需要的cookies中

        for cookie in cookies:
            self.browser.add_cookie(cookie)
        self.browser.get(self.logined_url)
        self.browser.refresh()

以上即可完成selenium进行免登录

3、传cookies给requests

首先我们要注意的是,requests中传入的cookies形式是多个name=value并以分号;连接的字符串形式,所以我们需要对通过selenium得到的cookies进行转换一下,我们只需要得到name和value的值即可

cookieList = []
for cookie in cookies:
    cookieList.append(cookie['name'] + '=' + cookie['value'])
cookieStr = '; '.join(cookieList)

再将cookieStr传入requests.get方法中即可

headers = {
    'cookie': cookieStr,
    'User-Agent': 'Mozilla / 5.0(Windows NT 6.1;Win64;x64) AppleWebKit / 537.36(KHTML, likeGecko) Chrome / 74.0.3729.108Safari / 537.36'
}
response = requests.get(self.logined_url, headers=headers)

以上我遇到的问题点有:
1、requests.get传入的cookies只需要name和value的值
2、在对selenium进行cookies验证之前,有browser.close(),出现报错,把该语句删除即可

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值