python - 使用 Python 请求选择表单

标签 python mechanize python-requests

我想使用能够填写表单和处理重定向的 python 库:

  1. “主页”页面的格式为 {'username':'user', 'password':'pass'}
  2. “重定向”页面将我带到一个新页面
  3. "new"页面有指向最终页面的链接
  4. “最终”页面的形式为 {'Field 1':'Data 1', 'Field 2':'Data 2'}

我想进入“最终”页面并填写表格。我已经查看了 SO 中关于 的所有帖子,阅读 API 文档和整个用户指南。

我已经能够使用 mechanize 填写“主页”页面表单:

import mechanize
# Fill out Log In form
br = mechanize.Browser()
br.open('http://www.yourfavoritesite.com')
br.select_form(nr=0)
br['username'] = 'user'
br['password'] = 'pass'
br.submit()

另外——在网页上禁用重定向后——我已经能够使用 mechanize 来填写"new"页面表单:

# Click link
br.find_link(text='Admin')
req = br.click_link(text='Admin')
br.open(req)

# Fill out Final form
br.select_form(nr=0)
br['Field 1'] = 'Data 1'
br['Field 2'] = 'Data 2'
br.submit()

如果我不禁用重定向并且页面重定向会发生什么,我没有进入"new"页面,当我尝试填写表单时出现以下错误:

File "<stdin>", line 1, in <module>
File "/usr/local/lib/python2.7/dist-packages/mechanize/_mechanize.py", line 524, in select_form
     raise FormNotFoundError("no form matching "+description)
mechanize._mechanize.FormNotFoundError: no form matching nr 0

我听说 Python Requests 非常简单,我想使用这个库,假设我可以按照以下方式做一些事情:

import requests
# Fill out Log In form
data = {'username':'admin', 'password':'pass'}
r = requests.get('http://www.yourfavoritesite.com', allow_redirects=True)
r = requests.put(r.url, data=data)

# Follow redirect to "new" page

# Click link
# I haven't heard of this feature in requests

# Fill out Final form
data = {'Field 1':'Data 1', 'Field 2':'Data 2'}
r = requests.put(r.url, data=data)

最佳答案

我知道这已经过时了,但我相信您从 requests 中寻找的答案(显然)不是 get,而是 post.

来自: http://docs.python-requests.org/en/latest/user/quickstart/#more-complicated-post-requests

>>> payload = {'key1': 'value1', 'key2': 'value2'}
>>> r = requests.post("http://httpbin.org/post", data=payload)
>>> print r.text
{
  ...
  "form": {
    "key2": "value2",
    "key1": "value1"
  },
  ...
}

关于python - 使用 Python 请求选择表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10507169/

相关文章:

python - 用 Mechanize 打开网页后,如何继续提交

ruby-on-rails - rails : printing a list to a view using Mechanize

python - 在 Flask-restplus 模型中不允许任何额外的字段

python - 使用 BERT 进行独特词的特征提取

python - pandas 填充数据框中给定的缺失时间间隔

python-3.x - CURL 到 Python 请求的转换 Elasticsearch

python网页抓取请求错误(mod security)

python - 无法在python中导入git

python - 以下是在 Python Mechanize 中按下提交按钮的结果

python - scrapy爬虫限制页面深度