RoboBrowser BadRequestKeyError (ключ)

Я пытаюсь войти на веб-сайт с помощью 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

person RojasRod    schedule 01.06.2016    source источник
comment
Никто? Стоит ли задавать этот вопрос на другом форуме? Спасибо   -  person RojasRod    schedule 02.06.2016
comment
привет нашел решение??   -  person Sriker Ch    schedule 30.07.2016


Ответы (3)


Старый поток, но я боролся с той же проблемой. Это сработало для меня:

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)
person dsugasa    schedule 15.05.2017

Код 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, а не идентификатор.

Этот код должен работать:

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

Если вам нужно получить поля формы, вы можете распечатать их:

print form.fields
person burgund    schedule 06.10.2016

Но пробовали ли вы использовать «попробовать и исключить»?

Я смог обойти эту ошибку, используя:

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

Я использовал другой веб-сайт, чем вы, поэтому убедитесь, что вы ввели правильные поля формы.

Позвольте мне знать, если это помогает!

person Julian Silvestri    schedule 06.09.2017