2012-08-11 30 views
0

我有一個Python腳本使用機械化瀏覽器登錄到自我託管的WordPress博客,導航到不同的頁面後自動重定向到儀表板自動化幾個內置函數。機械和Python沒有正確處理餅乾

這個腳本實際上在我的大部分博客中都能100%地工作,但是與其中一個博客進入永久循環。

區別在於唯一失敗的是一個名爲Wassup running的插件。這個插件爲所有訪問者設置了一個會話cookie,這就是我認爲會導致這個問題的原因。

當腳本進入新頁面時,Wordpress代碼沒有得到正確的cookie集,決定瀏覽器未登錄並重定向到登錄頁面。該腳本再次登錄並嘗試相同的功能,我們再次去。

我試過使用Twill,它可以正確登錄並正確處理cookie,但默認情況下,Twill會將所有內容輸出到命令行。這不是我想要的行爲,因爲我現在正在進行頁面操作,並且需要訪問原始html。

這是設置代碼

# Browser 
self.br = mechanize.Browser() 

# Cookie Jar 
policy = mechanize.DefaultCookiePolicy(rfc2965=True) 
cj = mechanize.LWPCookieJar(policy=policy) 
self.br.set_cookiejar(cj) 

成功登錄我調用這個函數

def open(self): 
    if 'http://' in str(self.burl): 
     site = str(self.burl) + '/wp-admin/plugin-install.php' 
     self.burl = self.burl[7:] 
    else: 
     site = "http://" + str(self.burl) + '/wp-admin/plugin-install.php' 
    try: 
     r = self.br.open(site, timeout=1000) 
     html = r.read() 
     return html 
    except HTTPError, e: 
     return str(e.code) 

我在想,我需要將餅乾保存到一個文件,然後打亂順序後所以Wordpress會話cookie會在Wassup之前返回。

其他建議?

+0

看看了'requests'庫 - 使得處理這些事情* *很多簡單 – 2012-08-11 14:38:42

+0

@喬恩克萊門特。感謝你的回答。我昨晚在您的評論後,設法與請求庫保持一段高質量的時間,並發現它符合我的喜好。我的確從命令行看來,在登錄時工作得很好,我認爲如果需要的話,我也可以操作這些cookie。這個庫是爲什麼機械化和斜紋不再被使用? – Burtm10 2012-08-12 01:37:40

+0

不能說真的 - 我認爲機械化和斜紋真的是別的東西,請求只是爲了讓事情比現有的urllib庫更容易。發生很多事情重疊或可能重疊... – 2012-08-12 14:10:43

回答

1

事實證明,這是一個完全不同的問題,並且似乎這是爲什麼我決定將答案放在這裏,以供任何人稍後閱讀。

當設置一個WordPress網站時,有一個選項用於默認爲http://sample.comhttp://www.sample.com。這原來是cookie存儲的問題。 Cookies作爲其名稱的一部分與URL一起存儲。我的程序使用這些格式中的一種或其他格式對網址進行半硬編碼。這意味着每次我發出一個新的url請求時,它的格式都是錯誤的,並且沒有找到正確名稱的cookie,所以WordPress站點正確地決定我沒有登錄並且讓我再次登錄。

解決的辦法是在登錄後抓取重定向中提供的URL並重新編碼變量(在本例中爲self.burl)以反映.httaccess文件希望看到的內容。

這解決了我的問題,因爲我的一些網站有一種格式,另一種格式。

我希望這可以幫助別人了使用請求,斜紋,機械化等