首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RoboBrowser BadRequestKeyError(密钥)

RoboBrowser BadRequestKeyError(密钥)
EN

Stack Overflow用户
提问于 2016-06-02 02:26:45
回答 3查看 2.2K关注 0票数 3

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

我的代码:

代码语言:javascript
复制
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()  

错误消息:

代码语言:javascript
复制
  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
EN

回答 3

Stack Overflow用户

发布于 2017-05-16 00:46:31

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

代码语言:javascript
复制
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)
票数 1
EN

Stack Overflow用户

发布于 2016-10-07 04:00:04

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

代码语言:javascript
复制
<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。

下面的代码应该可以工作:

代码语言:javascript
复制
form.fields["emailOrNickname"].value = "an_email_address"
form.fields["password"].value = "a_password"
form.fields["rememberMe"].value = "true"

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

代码语言:javascript
复制
print form.fields
票数 0
EN

Stack Overflow用户

发布于 2017-09-07 00:32:21

但是你有没有试过使用“try and except”呢?

我可以使用以下命令绕过这个错误:

代码语言:javascript
复制
try:
    form['userid'] = 'my_username'
    form['password'] = 'my_password'
except Exception:
    pass

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37576190

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档