Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何合并成功登录';通过selenium将状态数据导入请求会话?_Python_Selenium_Python Requests - Fatal编程技术网

Python 如何合并成功登录';通过selenium将状态数据导入请求会话?

Python 如何合并成功登录';通过selenium将状态数据导入请求会话?,python,selenium,python-requests,Python,Selenium,Python Requests,当然,我目前的需求可以通过selenium来实现,但它有缺点:速度慢,需要在计算机上打开真正的浏览器 我的计划是这样的:使用selenium登录以获取一些状态数据,然后使用这些数据通过请求建立会话,这样我可以更快地提出其他频繁发布的请求(例如向该站点提交评论或帖子) 我尝试直接修改会话的属性,但失败,出现错误requests.cookies.CookieConflictError:存在多个名为“tx3\U sid”的cookies 我尝试的原因是,当纯粹使用请求时: import request

当然,我目前的需求可以通过selenium来实现,但它有缺点:速度慢,需要在计算机上打开真正的浏览器

我的计划是这样的:使用
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