繁体   English   中英

如何使用Python请求,会话或Dryscrape维护会话Cookie(退出时过期)?

[英]How to maintain session cookies (expire on exit) with Python requests, sessions, or dryscrape?

我在尝试构建python机器人来检查应用程序状态时遇到了一些麻烦。 为了说明,这是该过程的示例:

1.)访问网站( https://examplewebsite.com/checkinfo.do?a=sample

2.)假设查询字符串正确,网站将删除一个cookie。 该Cookie是“会话Cookie”,因此在退出关闭页面或离开网页后立即失效。

3.)一旦获得cookie,请访问https://examplewebsite.com/step2.do?a=sample

4.)将请求结果解析到https://examplewebsite.com/step2.do?a=sample

尽管这看起来很简单,但是我无法将第二个请求发送到https://examplewebsite.com/step2.do?a=sample,并且经常遇到说“会话已过期”的页面。

我尝试使用Python请求,Python request.session和dryscrape重现此过程。 但是我无法使其正常工作-我的直觉是,由于cookie是“会话cookie”,因此当对https://examplewebsite.com/step2.do?a=sample的第二个请求启动时,它立即出现,但是页面加载之前。

解释该问题的更好方法可能是浏览器行为,使用Firefox和IE,网站的行为如下:

1.)访问网站( https://examplewebsite.com/checkinfo.do?a=sample

  • 成功获取cookie

2.)将网址替换为https://examplewebsite.com/step2.do?a=sample

  • 出现“会话已过期”警告

但是,这确实有效:

1.)访问网站(链接同上)

  • 成功获取cookie

2.)在保持第一个标签页打开的同时,创建第二个标签页并将https://examplewebsite.com/step2.do?a=sample粘贴到浏览器中

  • 该信息已正确加载,并且不会出现“会话过期”警告。

所以我的问题是,如何在Python中重现“创建新标签页”的行为,同时保持请求之间共享会话cookie。

这是我尝试干擦的方法

import dryscrape

a = dryscrape.Session()
a.set_header("User-Agent", "Firefox")
a.visit('checkinfo.do URL')

b = dryscrape.Session()
b.set_header("User-Agent", "Firefox")
b.set_cookie(a.cookies())   #This is my attempt to share the session cookies in a seperate dryscrape object to simulate putting the URL in a second tab.
b.visit('step2.do URL')

不幸的是,上述方法不起作用,并且在第二个请求之前和之后,a.cookies与b.cookies不匹配。

注意:网站页面上确实有将在页面卸载后结束会话的代码。 因此,如果dryscrape正在做等同于卸载页面的任何操作,则会话cookie将被服务器标记为无效。

现在我也遇到了类似的问题。

您的代码的问题在于a.cookies()返回cookie列表。 您需要分别设置每个cookie。

尝试这样的事情:

b = dryscrape.Session()
b.set_header("User-Agent", "Firefox")
for cookie in a.cookies():
    b.set_cookie(cookie)

希望能帮助到你 :)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM