如何使用Python请求,会话或dryscrape维护会话cookie(退出时到期)?

时间:2017-11-18 13:09:01

标签: python session cookies python-requests dryscrape

我在尝试构建python bot以检查应用程序的状态时遇到了一些麻烦。有关解释,以下是该过程的示例:

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 requests.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在请求之间共享。

以下是我在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')

不幸的是,上面的内容不起作用,并且a.cookies在第二次请求之前和之后都与b.cookies不匹配。

注意:网站页面的代码会在卸载页面时结束会话。因此,如果dryscrape正在执行与卸载页面相同的任何操作,则会话cookie将被服务器标记为无效。

1 个答案:

答案 0 :(得分:0)

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

您的代码存在的问题是a.cookies()会返回Cookie列表。您需要单独设置每个cookie。

尝试这样的事情:

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

希望有所帮助:)