Python 如何合并成功登录';通过selenium将状态数据导入请求会话?
当然,我目前的需求可以通过selenium来实现,但它有缺点:速度慢,需要在计算机上打开真正的浏览器 我的计划是这样的:使用Python 如何合并成功登录';通过selenium将状态数据导入请求会话?,python,selenium,python-requests,Python,Selenium,Python Requests,当然,我目前的需求可以通过selenium来实现,但它有缺点:速度慢,需要在计算机上打开真正的浏览器 我的计划是这样的:使用selenium登录以获取一些状态数据,然后使用这些数据通过请求建立会话,这样我可以更快地提出其他频繁发布的请求(例如向该站点提交评论或帖子) 我尝试直接修改会话的属性,但失败,出现错误requests.cookies.CookieConflictError:存在多个名为“tx3\U sid”的cookies 我尝试的原因是,当纯粹使用请求时: import request
selenium
登录以获取一些状态数据,然后使用这些数据通过请求建立会话,这样我可以更快地提出其他频繁发布的请求(例如向该站点提交评论或帖子)
我尝试直接修改会话的属性,但失败,出现错误requests.cookies.CookieConflictError:存在多个名为“tx3\U sid”的cookies
我尝试的原因是,当纯粹使用请求时
:
import requests
loginUrl = "http://tx3.netease.com/logging.php?action=login"
# postUrl = "http://tx3.netease.com/post.php?action=reply&fid=22&tid=3966375"
client = requests.session()
r = client.get(loginUrl)
r.encoding='gb18030'
print(client.cookies)
# Will get: <<class 'requests.cookies.RequestsCookieJar'>[<Cookie tx3_sid=kkfBk7 for .netease.com/>, <Cookie PHPSESSID=6vctcjdrg1mrig6h0kndmuurn4 for tx3.netease.com/>]>
# So I try to get tx3_sid and PHPSESSID via selenium and set the attributes in requests `client.cookies`
但是会话不再支持进一步的请求,因此可能整个方法都不可行。由请求提供的字典接口在处理cookie时受到限制
除了名称之外,cookie还有一个域和路径,当您使用client.cookies[name]=value
设置cookie时,这两个域和路径都为空。现有cookie有一个与之关联的域和路径,如果要替换这些cookie,您需要先删除它们,或者匹配它们的域和路径
首先删除它们最简单:
del client.cookies['tx3_sid'], client.cookies['PHPSESSID']
client.cookies['tx3_sid'] = tx3_sid
client.cookies['PHPSESSID'] = phpsessid
这将创建具有空白路径和域的新cookie,这意味着它们将用于没有特定域和路径匹配的所有请求
另一种方法是循环使用客户端
,找到匹配的cookie对象并直接更改这些对象:
for cookie in client.cookies:
if cookie.name == 'tx3_sid':
cookie.value = tx3_sid
elif cookie.name == 'PHPSESSID':
cookie.value = phpsessid
这个方法不起作用,但是你提醒我检查源代码。我成功地替换了eack cookie对象中的值,然后会话就不能再支持进一步的请求了。我想合并cookie值不是一个好主意。我可能会尝试其他方法。@xiang:您必须使用then来查找cookie对象,并直接在这些对象上设置值。
del client.cookies['tx3_sid'], client.cookies['PHPSESSID']
client.cookies['tx3_sid'] = tx3_sid
client.cookies['PHPSESSID'] = phpsessid
for cookie in client.cookies:
if cookie.name == 'tx3_sid':
cookie.value = tx3_sid
elif cookie.name == 'PHPSESSID':
cookie.value = phpsessid