python的机械化和表单:返回javascript字符串

时间:2014-09-25 15:00:06

标签: javascript python html authentication mechanize

我正在尝试通过Mechanize访问http://forum.kriminala.net并解析我的收件箱邮件。

从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>

我的下一个想法是也许我应该手动转到主法师,所以我在Mechanize中打开主页,把它放到一个html文件中,在浏览器中打开,但文件仍然看起来像我没有登录。

我该如何处理?

P.S。我是一个完整的Python菜鸟,所以也许我只是不知道要谷歌来获取我的答案。如果是这种情况,请指出我正确的方向。

谢谢!

1 个答案:

答案 0 :(得分:0)

一切似乎都好。生成的页面使用JavaScript将您重定向到主页面(或者可能在您登录之前的任何地方),这是一个合理的事情。由于您的浏览器&#34;中没有JavaScript,因此您需要在需要的地方手动导航。

登录的实际结果应该是其中一个响应中的Set-Cookie:标头。您需要在后续请求标头中使用该cookie,以使服务器认为您已登录。有关更多理论,请参阅HTTP cookie @wikipedia。

Emulating a Browser in Python with mechanize似乎在机械化中有相关代码,特别是br.set_cookiejar()命令。