6

所以我想自动填写和提交表格,我正在Requests这样做。

通过检查元素,我知道要提交的 url 和提交的类型(帖子):

method="post"
action="/sformsubmit"
enctype="multipart/form-data"

我的问题是我的请求没有通过并且对此相当陌生,我不知道为什么。

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

   ___________________________          ________________________________
   |    Submit decleration   |          |        Reset Form            |
   ___________________________          ________________________________

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

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

我正在尝试以下操作:

>>> payload = {'inLeader':'', 'inMember':'', 'version':'0', 'key':'2013:a:c:3:2s'}

但是它似乎不起作用并且不会产生任何错误。

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

4

1 回答 1

6

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

payload = {
    'inLeader':'',
    'inMember':'',
    'version':'0',
    'key':'2013:a:c:3:2s',
}

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

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

requests支持这一点。下面的例子:

import requests
from requests.auth import HTTPBasicAuth
requests.get(url, auth=HTTPBasicAuth('your username', 'your password'))

试着发出一个 get 请求,看看你是否至少能得到 200 个响应。这意味着身份验证正在工作。然后你可以尝试做实际的帖子。

于 2013-10-19T11:10:08.460 回答