PYTHON Mechanize登录表单类

时间:2016-04-02 11:58:28

标签: python mechanize

我尝试使用mechanize登录以下表单。

<div class="container">
    <form class="form-signin" id="form_login">
        <h2 class="form-signin-heading"><center>GReAT Sinkhole Database</center></h2>
        <div id="form_login_error_box" class="form_error_box"></div>
        <label for="form_username" class="sr-only">Username</label>
        <input type="text" id="form_username" class="form-control" placeholder="Username" required autofocus>
        <label for="form_password" class="sr-only">Password</label>
        <input type="password" id="form_password" class="form-control" placeholder="Password" required>

        <button class="btn btn-lg btn-primary btn-block" type="submit">Sign in</button>
    </form>
</div>

机械化浏览器方法br.submit()br.click()没有提交表单,我也没有检索到想要的HTML。

这是代码

browser.select_form(nr = 0)
browser.form.set_value(login_user, nr=0)
browser.form.set_value(Loginpwd, nr=1)
ff = browser.submit()
print " title ##" + str(browser.title())
print ff.read()

应该是什么?

2 个答案:

答案 0 :(得分:2)

<form>元素没有methodaction属性。

没有方法的表单的默认行为是通过GET请求提交,并且由于没有定义操作,我猜他们会提交到页面的URL(HTML规范没有指定如果发生的事情,如果没有定义任何行动)。登录表单不太可能像这样。

因此,此表单似乎可能是通过javascript提交的,并且不适合使用Mechanize进行访问。

答案 1 :(得分:0)

我刚刚解决了这个问题,因为form.submit似乎没有效果

datat = {'username': 'ADMIN','password':'ADMIN'}
#Encode the parameters
data = urllib.urlencode(datat)
#Submit the form (POST request).
print "POST"
browser.open(post_url,data)
print "POSTED"
print browser.open(url_to_get).read()