我正在尝试使用请求库向包含两种形式的网站提交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查看发布表单字段:

python - 如何使用python请求库在两种形式之间进行选择?-LMLPHP

您不提供的字段为空。

10-06 05:22
查看更多