所以我想自动填写和提交表单,我正在使用Requests
来做这件事。
从检查元素我知道要提交的网址和子网站的类型(帖子):
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'}
然而,它似乎无法正常工作,并且不会产生任何错误。
任何帮助都会感激不尽。提前致谢
答案 0 :(得分:6)
好的,你的有效载荷是错误的。但。我不确定更改它是否真的有用,因为您没有包含您收到的错误消息。
payload = {
'inLeader':'',
'inMember':'',
'version':'0',
'key':'2013:a:c:3:2s',
}
您需要了解的有关HTML表单和POST请求的信息是,当您单击表单上的提交按钮时,它会发送具有value
属性的任何字段的name
属性。例如,不会发送类型为submit
的输入字段。它没有name
。我怀疑inLeader
和inMember
字段没有数据。这是通过Javascript以某种方式设置的吗?
您在评论中提到需要登录才能访问表单?这很可能意味着您还需要发送正确的cookie以及请求。因此,访问URL我会被要求输入用户名/密码。本网站正在使用basic auth。
requests
支持此功能。示例如下:
import requests
from requests.auth import HTTPBasicAuth
requests.get(url, auth=HTTPBasicAuth('your username', 'your password'))
尝试发出获取请求并查看您是否至少可以获得200响应。这意味着auth正在运行。然后你可以尝试做实际的帖子。