我在尝试构建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)
2.。)将网址替换为https://examplewebsite.com/step2.do?a=sample
但是,这确实有效:
1。)访问网站(链接同上)
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将被服务器标记为无效。
答案 0 :(得分:0)
现在我也遇到了类似的问题。
您的代码存在的问题是a.cookies()
会返回Cookie列表。您需要单独设置每个cookie。
尝试这样的事情:
b = dryscrape.Session()
b.set_header("User-Agent", "Firefox")
for cookie in a.cookies():
b.set_cookie(cookie)
希望有所帮助:)