使用Requests Python提交表单

use*_*415 6 python forms python-requests

所以我想自动填写和提交表单,我正在使用Requests它.

从检查元素我知道要提交的URL和submition的类型(post):

method="post"
action="/sformsubmit"
enctype="multipart/form-data"
Run Code Online (Sandbox Code Playgroud)

我的问题是,我的请求没有通过,并且对此我是一个相当新的我不知道为什么.

在我的网页上,我有两个并排的按钮,如下所示:

   ___________________________          ________________________________
   |    Submit decleration   |          |        Reset Form            |
   ___________________________          ________________________________
Run Code Online (Sandbox Code Playgroud)

当我检查那条线上的元素时,我得到:

<td align="center" colspan="2">
    <input type="hidden" name="inLeader" value>
    <input type="hidden" name="inMember" value>
    <input type="hidden" name="version" value="0">
    <input type="hidden" name="key" value="2013:a:c:3:2s">
    <input type="submit" value="Submit declaration">
    <input type="reset" value="Reset form">
</td>
Run Code Online (Sandbox Code Playgroud)

我正在尝试以下方法:

>>> payload = {'inLeader':'', 'inMember':'', 'version':'0', 'key':'2013:a:c:3:2s'}
Run Code Online (Sandbox Code Playgroud)

但它似乎没有工作,并没有产生任何错误.

任何帮助将不胜感激.提前致谢

ayc*_*dee 6

好的,你的有效载荷是错误的.但.我不确定更改它是否真的有用,因为您没有包含您收到的错误消息.

payload = {
    'inLeader':'',
    'inMember':'',
    'version':'0',
    'key':'2013:a:c:3:2s',
}
Run Code Online (Sandbox Code Playgroud)

您需要了解的HTML表单和POST请求是,当您单击表单上的提交按钮时,它会发送value带有属性的任何字段的name属性.submit例如,不会发送具有该类型的输入字段.它没有name.我怀疑inLeaderinMember田里没有数据.这是通过Javascript以某种方式设置的吗?

您在评论中提到需要登录才能访问表单?这很可能意味着您还需要发送正确的cookie以及请求.因此,访问URL我会被要求输入用户名/密码.本网站使用的是基本身份验证.

requests支持这个.示例如下:

import requests
from requests.auth import HTTPBasicAuth
requests.get(url, auth=HTTPBasicAuth('your username', 'your password'))
Run Code Online (Sandbox Code Playgroud)

尝试只是提出获取请求,看看你是否至少可以获得200响应.这意味着auth正在运行.然后你可以尝试做实际的帖子.