2014-09-25 62 views
0

我想通過機械化訪問http://forum.kriminala.net並解析我的收件箱消息。python的機械化和形式︰javascript字符串返回

從HTML代碼中,我可以看到登錄表單是在主頁的嵌套iframe:

<iframe src="login/" style="width: 100%; height: 124px; border-bottom: 2px solid #DDE5EA; box-shadow: 0px 0px 10px #ccc;" frameborder="0" vspace="0" scrolling="no" hspace="0"> 
... 
<form action="" class="auth_form" method="post"> 
<input type="hidden" name="referer" value="http%3A%2F%2Fforum.kriminala.net%2F"> 
<input type="text" class="text_input" name="username" placeholder="Имя пользователя" value="" tabindex="1"> 
<input type="password" class="text_input" name="password" placeholder="Пароль" tabindex="2"> 
<input type="checkbox" id="autologin" checked="checked" name="autologin" tabindex="3"> 
<label for="autologin">Запомнить меня</label> 
<input type="submit" class="submit_button" id="submit_button" name="login" value="" tabindex="3"> 
</form> 
... 
</iframe> 

所以我瀏覽到http://forum.kriminala.net/login,找到的形式存在,並與我的用戶名提交和密碼,將結果輸出到文件中(以查看我是否成功登錄)。

br=mechanize.Browser() 
br.open("http://forum.kriminala.net/login/") 
br.select_form(nr=0) 
br["username"]="12n" 
br["password"]="123456" 
response=br.submit() 
htmlpage=open("response.html","w") 
htmlpage.writelines(response.get_data()) 
htmlpage.close() 

然而,所有我在文件中看到的是這樣的:

<script type="text/javascript"> 
window.top.location = 'http://forum.kriminala.net/'; 
</script> 

我的下一個想法是,也許我應該手動去主法師,所以我打開機械化主頁,把它到一個html文件打開瀏覽器,但該文件仍然看起來像我沒有登錄。

我該如何處理?

P.S.我是一個完整的Python noob,所以也許我只是不知道該如何google來獲得我的答案。如果是這種情況,請指出我正確的方向。

謝謝!

回答

0

一切似乎都沒問題。結果頁面使用JavaScript將您重定向到主頁面(或者可能登錄到您登錄之前的任何地方),這是一件合理的事情。由於您的「瀏覽器」中沒有JavaScript,因此您需要在需要的地方手動導航。

登錄的實際結果應該是其中一個響應中的Set-Cookie:標頭。您需要在隨後的請求標頭中使用該cookie,以使服務器認爲您已登錄。有關更多理論,請參閱HTTP cookie @wikipedia。

Emulating a Browser in Python with mechanize似乎有相關的代碼來做機械化,特別是br.set_cookiejar()命令。

+0

是的,這工作完美!,非常感謝! – kurtgn 2014-09-26 16:10:33