2014-09-25 54 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