这里是 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")
如前所述,那里的代码不会显示任何错误。启动浏览器时,我可以看到表格填写正确
感谢帮助:),当然还有关于我的代码的任何其他提示!
最佳答案
MechanicalSoup 能够提交登录表单,只要它不是由 JavaScript 处理的(参见 "When to use 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 login tutorial .
关于python - Request.Response 对象不会重定向到正确的 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47500557/