Mechanize 浏览器在打开 URL 之间会保存 cookies 吗?

1 投票
1 回答
2454 浏览
提问于 2025-04-18 07:27

我有一段类似这样的代码:

br = mechanize.Browser()
br.open("https://mysite.com/")
br.select_form(nr=0)
#do stuff here
response = br.submit()
html = response.read()

#now that i have the login cookie i can do this...
br.open("https://mysite.com/")
html = response.read()

不过,我的脚本在第二次请求时好像没有登录。我检查了第一次请求,确实成功登录了。我的问题是:在Mechanize浏览器中,是否需要自己管理cookies,还是说我需要设置一个CookieJar之类的东西,或者它会自动帮我管理所有的cookies呢?

第一个例子在这里提到cookies在请求之间是可以传递的,但没有提到浏览器的相关内容。

1 个回答

2

是的,你需要在使用 mechanize 时,在不同的 open 请求之间保存 cookie。下面的代码应该可以实现这个功能,你可以把 cookiejar 加到 br 对象中,只要这个对象还存在,它就会保持那个 cookie

import Cookie
import cookielib
cookiejar =cookielib.LWPCookieJar()

br = mechanize.Browser()
br.set_cookiejar(cookiejar)
br.open("https://mysite.com/")
br.select_form(nr=0)
#do stuff here
response = br.submit()
html = response.read()

#now that i have the login cookie i can do this...
br.open("https://mysite.com/")
html = response.read()

详细的内容可以参考 文档

我经常使用 perlmechanize,但对 python 不太熟悉,所以可能漏掉了一些 python 特有的内容,如果有遗漏我很抱歉,但我不想只简单地回答一个 yes

撰写回答