【问题标题】:RoboBrowser BadRequestKeyError(key)RoboBrowser BadRequestKeyError(key)
【发布时间】:2016-10-01 06:22:57
【问题描述】:

我正在尝试使用 RoboBrowser 登录网站,但遇到错误消息。

我的代码:

from robobrowser import RoboBrowser

browser = RoboBrowser()

def login():
    browser.open('https://www.kijiji.ca/t-login.html')
    form = browser.get_form(id="login-form")
    form.fields["LoginEmailOrNickname"].value = "an_email_address"
    form.fields["login-password"].value = "a_password"
    form.fields["login-rememberMe"].value = "true"
    browser.submit_form(form)

login()  

错误信息:

  Traceback (most recent call last):
  File "/home/rojaslee/Desktop/kijiji_poster/kijiji_poster.py", line 16, in <module>
    login()
  File "/home/rojaslee/Desktop/kijiji_poster/kijiji_poster.py", line 11, in login
    form.fields["LoginEmailOrNickname"].value = ["an_email_address"]
  File "/usr/local/lib/python3.4/dist-packages/werkzeug/datastructures.py", line 744, in __getitem__
    raise exceptions.BadRequestKeyError(key)
    werkzeug.exceptions.BadRequestKeyError: 400: Bad Request

【问题讨论】:

  • 没人?我应该在不同的论坛上问这个问题吗?谢谢
  • 嘿,你找到解决方案了吗??

标签: python-3.x werkzeug robobrowser


【解决方案1】:

旧线程,但我一直在努力解决同样的问题。这对我有用:

from robobrowser import Robobrowser

browser = RoboBrowser

def login():
    browser.open('https://www.kijiji.ca/t-login.html')
    form = browser.get_form(id="login-form")
    form["EmailOrNickname"].value = "an_email_address"
    form["password"].value = "a_password"
    form["rememberMe"].value = "checked"
    browser.submit_form(form)

【讨论】:

    【解决方案2】:

    您要登录的网站的 HTML 代码如下:

    <section>
      <label for="LoginEmailOrNickname">Email Address or Nickname:</label>
      <input id="LoginEmailOrNickname" name="emailOrNickname" req="req" type="text" value="" maxlength="128"><span class="field-message" data-for="LoginEmailOrNickname"></span>
    </section>
    <section>
      <label for="login-password">Password:</label>
      <input id="login-password" name="password" req="req" type="password" value="" maxlength="64"><span class="field-message" data-for="login-password"></span>
      <a id="LoginForgottenPassword" href="/t-forgot-password.html">Forgot your password?</a>
    </section>
    

    要在表单字段上设置值,您必须获取 name 属性,而不是 id。

    这段代码应该可以工作:

    form.fields["emailOrNickname"].value = "an_email_address"
    form.fields["password"].value = "a_password"
    form.fields["rememberMe"].value = "true"
    

    如果您需要获取表单的字段,您可以打印它们:

    print form.fields
    

    【讨论】:

      【解决方案3】:

      但是您是否尝试过使用“try and except”?

      我能够使用以下方法解决此错误:

      try:
          form['userid'] = 'my_username'
          form['password'] = 'my_password'
      except Exception:
          pass
      

      我使用的网站与您不同,因此请确保您输入了正确的表单字段。

      如果这有帮助,请告诉我!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-02-22
        • 1970-01-01
        • 2018-08-10
        • 1970-01-01
        • 1970-01-01
        • 2017-07-23
        • 1970-01-01
        相关资源
        最近更新 更多