javascript - python的 Mechanize 和形式: javascript string returned

标签 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文件中以在浏览器中打开,但该文件仍然看起来我没有登录。

我该如何处理?

附言我是一个完整的 Python 菜鸟,所以也许我只是不知道要谷歌什么才能得到我的答案。如果是这种情况,请指出我正确的方向。

谢谢!

最佳答案

一切似乎都很好。结果页面使用 JavaScript 将您重定向到主页(或可能重定向到您登录之前所在的任何位置),这是一个合理的做法。由于您的“浏览器”中没有 JavaScript,您需要手动导航到任何需要的地方。

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

Emulating a Browser in Python with mechanize似乎有相关的代码可以在 Mechanize 中做到这一点,特别是 br.set_cookiejar()命令。

关于javascript - python的 Mechanize 和形式: javascript string returned,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26041819/

相关文章:

python - 乘以特定维度矩阵

html - 在已标记的输入元素上使用 "aria-labelledby"的目的是什么?

javascript - 如何使用 firebase 按降序在我的无限滚动中首先显示我的热门帖子?

javascript - 如何使用 EJS 在函数中发送多个参数

javascript - 为什么 AJAX 会破坏插件?

python - 如何在 python 中去除文件中文本中的\n,然后计算文本中包含超过 n 个字母的单词?

javascript - Jquery Accordion 选项卡单击按钮时不会关闭

python - Django 开发服务器未检测到我的 html 文件中的更改

javascript - 如何在我的代码中找到特定的 Javascript

html - Jw 播放器视频无法在移动设备上自动启动