【问题标题】:password vailidation failing using mechanize/python使用 mechanize/python 密码验证失败
【发布时间】:2013-06-26 02:45:17
【问题描述】:

我正在尝试使用 mechanize for python 登录网站;但是,当在表单中提供正确的凭据时,它无法登录。

这是我按照机械化教程所做的事情:

def logon(self):
    baseurl = "https://www.website.com/login"
    br = mechanize.Browser(factory=mechanize.RobustFactory())
    br.open(baseurl)
    br.select_form(nr=0)
    br.form["username"] = self.username
    br.form["password"] = self.password
    response = br.submit()
    print response.geturl()

这应该带我到 website.com/dashboard 但它在 website.com/login 页面上说好像它失败了。我可以手动登录,一切都通过调试器,所以我不确定我做错了什么。我进行了一些挖掘,并检查了表单 HTML 中的 javascript,并且表单似乎没有附加任何内容。

这是表格:

<form method="post" class="login-form">
                <fieldset>
                    <div class="row form-section">
                        <label for="email">Email Address</label>
                        <span class="input-text"><input class="required-email" type="text" id="email" value="" name="username" /><span class="required">Required Info</span></span>
                        <!--<input type="text" id="email" name="username" placeholder="Enter Email Address" class="text" aria-required="true" required="required" style='float:right;' size="30" value="" /><p>  -->
                    </div>
                    <div class="row form-section">
                        <label for="pass">Password</label>
                        <span class="input-text"><input class="required-text" type="password" id="pass" value="" name="password" /><span class="required">Required Info</span></span>
                        <!--<input type="password" placeholder="Enter Password" class="text" size="30" autocomplete="off"  value="" id="password" name="password" style='float:right;' aria-required="true" required="required" />-->
                    </div>
                    <div class="row row-btn">
                        <input type="submit" value="Log in" />
                        <span><a href="/sign-up" class="sign-in">Don't have an account?</a><br><br><a href="/component/com_oms/task,reset-password/view,user/" class="sign-in">Forgot your password?</a>&nbsp;&nbsp;<a href="/resend-activation" class="sign-in">Didn't get your activation email?</a></span>
                    </div>
                </fieldset>
                <input type="hidden" value="com_oms" name="option">
                <input type="hidden" value="login" name="task">
                <input type="hidden" name="return" value="">
                <input type="hidden" name="9402951e32acb8d73d4a6972ae540c63" value="1" />
</form>

我知道有人问了一些类似的问题,但我的搜索似乎没有任何明确的答案。任何人都可以阐明发生了什么吗?

【问题讨论】:

  • 我能想到的唯一其他事情是该网站恰好是https。我不确定机械化能否处理加密。

标签: python-2.7 login-script mechanize-python


【解决方案1】:

想添加为评论,但无法: 我怀疑少数隐藏的输入,尤其是字符串是否可以作为防止 CSRF 攻击的验证。您是否尝试将隐藏字段连同电子邮件/密码一起提交回来?这可能会对你有所帮助。

【讨论】:

  • 嗯...我没想到。我会试试看会发生什么。
  • 所以我试图改变它们,除了最后一个之外,它们显然都是只读的。最后一个似乎改变了让我相信它是某种令牌身份验证?我不确定如何引用它。
  • 您是否尝试将 User-Agent 添加到标题中?像这样: br.addheaders = [('User-agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox /13.0.1')]
  • 是的,我试过br.addheaders = [('User-agent','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11'), ('Accept', 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'), ('Accept-Encoding', 'gzip,deflate,sdch'), ('Accept-Language', 'en-US,en;q=0.8'), ('Accept-Charset', 'ISO-8859-1,utf-8;q=0.7,*;q=0.3')]。我也试过你提供的那个。两者似乎都不起作用。
猜你喜欢
  • 2021-02-28
  • 1970-01-01
  • 2020-09-21
  • 2015-04-19
  • 2017-10-17
  • 2017-04-03
  • 2016-05-27
  • 2017-11-09
  • 1970-01-01
相关资源
最近更新 更多