我遇到了一些麻烦,试图构建一个python机器人来检查应用程序的状态。对于解释,这里是这个过程的一个例子:如何使用Python请求,会话或dryscrape维护会话cookie(在退出时过期)?
1)访问网站(https://examplewebsite.com/checkinfo.do?a=sample
2)假设查询字符串是否正确,网站将下降一个cookie。这个cookie是一个'会话cookie',因此在退出关闭或离开网页时立即过期。一旦饼干已获得访问https://examplewebsite.com/step2.do?a=sample
4)请求的解析结果https://examplewebsite.com/step2.do?a=sample
虽然这看似简单,我无法发送第二请求https://examplewebsite.com/step2.do?a=sample
3)和我经常遇到一个页面说“会话过期”。
我试图用Python请求,Python requests.session以及dryscrape重现这个过程。但我无法实现它 - 我的直觉是,因为cookie是一个“会话cookie”,当第二次请求https://examplewebsite.com/step2.do?a=sample启动但页面加载之前,它会立即生效。
也许有更好的方式来解释的问题是与浏览器的行为,使用Firefox和IE的网站的行为类似于下面:
1)访问网站(https://examplewebsite.com/checkinfo.do?a=sample)
- Cookie是成功获得
2.)与替换URL https://examplewebsite.com/step2.do?a=sample
- “会话过期” 的警告提出
然而,这并不工作:
1)
- 成功获得一个cookie访问网站(链接同上)
2.)在保持第一个选项卡打开的同时,创建第二个选项卡并将 https://examplewebsite.com/step2.do?a=sample粘贴到浏览器中
- 信息已正确加载,并且未出现“会话过期”警告。
所以我的问题是,如何在Python中重现“创建新选项卡”的行为,同时保持请求之间共享会话cookie。
这是我尝试做它在dryscrape
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')
不幸的是,上述不工作,和一个。在第二次请求之前和之后,cookie与b.cookies不匹配。
注意:网站页面的代码会在页面卸载时结束会话。因此,如果dryscrape执行与卸载页面相同的任何操作,会话cookie将被服务器标记为无效。
我试图重新创造dryscrape一个新的标签相同的效果不工作,有人可以确认,如果我传递的cookies正确吗?是否有特殊的方式来传递“会话cookie”,因为它看起来好像没有传递完整的cookie。请参阅上面的编辑。 –
我曾尝试通过set_header设置Cookie信息,但仍未能使其正常工作。 我相信由于某种原因,当我通过dryscrape获取cookie时,它即将过期,可能是因为dryscrape的行为导致cookie在客户端或服务器端过期。 –
仍然在这个: 我发现我可以通过dryscrape贷款第二页,如果我: 1.)访问firefox的第一页; 2.)访问firefox中的第二页: 3.)使用set_headers将第二个firefox页面加载的请求标题复制到dryscrape对象中,然后使用visit加载第二个页面。 –