[英]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 )
2.)将网址替换为https://examplewebsite.com/step2.do?a=sample
但是,这确实有效:
1.)访问网站(链接同上)
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.