<p>首先,在代码中输入一个小的输入错误,(在那里加上冒号)</p>
<pre><code>payload['ddlState:'] = 'Assam'
</code></pre>
<p>更大的问题在于页面的构造方式。该页面有三个下拉列表,这些下拉列表发送POST请求。每个POST请求都返回一个修改的_VIEWSTATE,该状态需要包含在后续请求的标头中</p>
<p>在您的代码中,您仅从原始GET请求的输入[form]获取_VIEWSTATE,您需要从上一个POST请求获取_VIEWSTATE。因此,以下措施应该有效:</p>
<pre><code>with requests.Session() as s:
s.headers['User-Agent'] = 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36'
r = s.get(URL)
soup = BeautifulSoup(r.text, "lxml")
# first POST = Select State
payload = {i['name']: i.get('value', '') for i in soup.select('input[name]')}
payload['ScriptManager1'] = 'UpdatePanel1|btnsubmit'
payload['ddlState'] = 'Assam'
payload['ddlCity'] = 'Select City'
payload['ddllocation'] = 'Select Location'
payload['__EVENTTARGET'] = 'ddlState'
r = s.post(URL, data=payload)
soup = BeautifulSoup(r.text, "lxml")
# second POST = Select City
payload = {i['name']: i.get('value', '') for i in soup.select('input[name]')}
payload['ScriptManager1'] = 'UpdatePanel1|btnsubmit'
payload['ddlCity'] = 'Golaghat'
payload['ddllocation'] = 'Select Location'
payload['__EVENTTARGET'] = 'ddlCity'
r = s.post(URL, data=payload)
soup = BeautifulSoup(r.text, "lxml")
# third POST = Select Location
payload = {i['name']: i.get('value', '') for i in soup.select('input[name]')}
payload['ScriptManager1'] = 'UpdatePanel1|btnsubmit'
payload['ddlCity'] = 'Golaghat'
payload['ddllocation'] = 'Golaghat'
payload['__EVENTTARGET'] = ''
s.headers.update(headers)
r = s.post(URL, data=payload)
soup = BeautifulSoup(r.text, "lxml")
item = soup.select_one("table")
print(item)
</code></pre>
<p>这段代码还有一些优化的空间。我试图使问题透明化</p>