2个月大的Python noob,
我使用MechanicalSoup填写网页上的登录表单,然后我想提交并转到用户个人资料页面。
尽管我的代码中没有任何错误,但在提交表单后,我仍然会从新的响应对象中获取主页的当前网址。 而且,这个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")
正如所说,代码不会显示任何错误。并且在启动浏览器时,我可以看到表单已正确填写
帮助表示赞赏:),关于我的代码的任何其他提示太多了!
答案 0 :(得分:0)
只要不是由JavaScript处理,MechanicalSoup就能够提交登录表单(请参阅"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。