這是因爲默認情況下機械化會自動創建一個共享的「餅乾罐」。對於更高級的cookie處理選項,您必須爲每個腳本會話創建自己的cookie jar。
我必須在過去的項目中使用自定義cookie jar,以便將cookie從一個會話移動到另一個會話。最終的結果是一樣的,你的腳本的每個實例都會有它自己的獨特文件來存儲它的cookie,所以它是在你的管理cookie文件,並知道他們不會感到困惑。
>>>> import mechanize
>>>> cj1 = mechanize.CookieJar()
>>>> cj2 = mechanize.CookieJar()
>>>> mech1 = mechanize.OpenerFactory().build_opener(mechanize.HTTPCookieProcessor(cj1))
>>>> mech2 = mechanize.OpenerFactory().build_opener(mechanize.HTTPCookieProcessor(cj2))
>>>> request = mechanize.Request('http://example.com') # testing shows they can share a request
>>>> response1 = mech1.open(request)
>>>> response2 = mech2.open(request)
>>>> print cj1
<mechanize._clientcookie.CookieJar[<Cookie JSESSIONID=54FBB2BE99E4CFDA8F8386F52FCF59C3>]>
>>>> print cj2
<mechanize._clientcookie.CookieJar[<Cookie JSESSIONID=350C0D544CDAD344A1272DA8D7B016B0>]>
在這個例子中,我測試過,你可以看到兩個機械化對象,每個都有它自己獨立的餅乾罐。
即使腳本運行在不同的進程中,它們共享一個cookie jar?我也做了以下與我的腳本:「'self.cj = mechanize.CookieJar(); self.mech = mechanize.Browser(factory = mechanize.RobustFactory()); self.mech.set_cookiejar(self.cj)'」 ,併發生同樣的行爲。我會嘗試一下你的方式,但是,有沒有一個原因我的方式沒有工作(無論是餅乾jar或hte腳本?) – Claudiu 2012-02-13 22:30:23
我複製我的代碼有點過於字面,並留在最後一點。我已經修改和測試過,現在它可以工作。看到上面的更新。 – 2012-02-14 14:41:30
我將如何使用這個'mechanize.Browser()'?我的代碼已經使用瀏覽器,如果可能的話,我寧願不改變它。 – Claudiu 2012-02-14 15:15:47