我正在尝试使用请求库向包含两种形式的网站提交POST请求。该网站是https://itsapps.unc.edu/dir/dirSearch/view.htm,我正在尝试访问高级搜索表单。
表单的html如下所示:
...
<div id="basicSearch" class="yui-hidden">
<form onSubmit="return false;" method="post" accept-charset="UTF-8">
...
</form>
</div>
<div id="advancedSearch"><!-- advanced search -->
<form onSubmit="return false;" method="post" accept-charset="UTF-8">
<table class="section">
<tr>
<td colspan="2"><label for="affiliation">Search
...
我将如何去做呢?有没有办法指定表单ID /名称?现在我所拥有的是:
url = 'https://itsapps.unc.edu/dir/dirSearch/search'
form_data = {'affiliation':'students',
'firstname':'Anthony'}
response = requests.post(url, data=form_data)
print response.text
由于高级搜索选项具有下拉菜单的从属关系,因此我假设在form参数中包含该选项将自动选择与参数匹配的表单,但是当我从form_data中删除从属关系参数时,输出不会更改。
请注意,在检查开发人员工具网络信息以进行基本搜索时看到的表单数据为:
searchString=Anthony
对于高级搜索是:
affiliation=student&firstname=Anthony&lastname=&email=&pid=&onyen=
最佳答案
您只需要发布到https://itsapps.unc.edu/dir/dirSearch/search
,您将得到一些json返回:
In [1]: data = {
...: "firstname": "Laurel",
...: "lastname": "Foote-Hudson"}
In [2]:
In [2]: r = requests.post("https://itsapps.unc.edu/dir/dirSearch/search", data=data)
In [3]: print(r.json())
[{u'uncReverseDisplayName': u'Foote-Hudson, Laurel', u'telephoneNumber': u'xxxxxxxxxxxxxxx', u'eduPersonNickname': u'Laurel', u'uncPreferredSurname': u'Foote-Hudson', u'sn': u'Foote-Hudson', u'spid': u'240a0d7c1534aa3a', u'mail': u'xxxxxxxxxxx', u'givenName': u'Laurel'}
您可以使用chrome或firefox查看发布表单字段:
您不提供的字段为空。