0

2 个月大的 Python 菜鸟在这里,

我正在使用 MechanicalSoup 在网页上填写登录表单,然后我想提交并转到用户个人资料页面。

尽管我的代码中没有任何错误,但在提交表单后,我仍然从我的新响应对象中获取主页的当前 url。而且这个repsonse对象的状态码是200,说明请求已经成功了?

这是我的代码的相关部分:

def randomstring():
     letters = string.ascii_lowercase
     return ''.join(random.choice(letters) for i in range(5))



br = mechanicalsoup.StatefulBrowser(soup_config=({'features': 'html.parser'}))
browser = br.open("https://www.opinieland.nl/nl-nl")
page = br.get_current_page()

Form = br.select_form(nr=0)
form = br.get_current_form()

for tag in page.find_all(True):
   LOGIN = page.select('input[class="col-md-7 col-sm-7 col-xs-6 form-control"]')
   for i in LOGIN:
       if i.get("name") == None:
         i["name"] = randomstring()
       else:
         continue

apsuser = Form.form.select('input[class="col-md-7 col-sm-7 col-xs-6 form-    control"]')[0]
apspas = Form.form.select('input[class="col-md-7 col-sm-7 col-xs-6 form-     control"]')[1]

form.set_input({apsuser.get('name'): username, apspas.get('name'): password})
form2 = br.select_form(selector=('a[class="btn btn-danger"]'))
soup = br.submit(form2, url="https://www.opinieland.nl/nl-nl") 

如前所述,那里的代码不会显示任何错误。并且在启动浏览器时,我可以看到表格已正确填写

感谢您的帮助:),当然还有关于我的代码的任何其他提示!

4

1 回答 1

0

MechanicalSoup 能够提交登录表单,只要它不是由 JavaScript 处理的(请参阅“何时使用 MechanicalSoup?”)。在这种情况下,我认为 MechanicalSoup 的轻微误用会导致错误。

  • 填写表格后,您通常希望使用br.submit_selected().
  • 该变量form2似乎不是一个表单(没有 POST 或 GET 操作),只是一个链接:

    In [9]: form2.form
    Out[9]: <a class="btn btn-danger" id="apslogin" style="margin-top:4px"> Inloggen</a>
    

要提交正确的表格,您应该替换

form2 = br.select_form(selector=('a[class="btn btn-danger"]'))
soup = br.submit(form2, url="https://www.opinieland.nl/nl-nl") 

br.submit_selected()

有关展示填写和提交登录表单的完整示例,请参阅MechanicalSoup 登录教程

于 2017-11-26T21:30:27.767 回答