Request.Response对象没有重定向到正确的URL

时间:2017-11-26 20:10:52

标签: python url-redirection mechanize mechanicalsoup

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") 

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

帮助表示赞赏:),关于我的代码的任何其他提示太多了!

1 个答案:

答案 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