在.net网站(python)上使用请求发布表单

2024-05-16 13:10:44 发布

您现在位置:Python中文网/ 问答频道 /正文

import requests

headers ={
"Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
"Accept-Encoding":"gzip, deflate",
"Accept-Language":"en-US,en;q=0.5",
"Connection":"keep-alive",
"Host":"mcfbd.com",
"Referer":"https://mcfbd.com/mcf/FrmView_PropertyTaxStatus.aspx",
"User-Agent":"Mozilla/5.0(Windows NT 10.0; WOW64; rv:40.0) Gecko/20100101 Firefox/40.0"}

a = requests.session()
soup = BeautifulSoup(a.get("https://mcfbd.com/mcf/FrmView_PropertyTaxStatus.aspx").content)

payload = {"ctl00$ContentPlaceHolder1$txtSearchHouse":"",
"ctl00$ContentPlaceHolder1$txtSearchSector":"",
"ctl00$ContentPlaceHolder1$txtPropertyID":"",
"ctl00$ContentPlaceHolder1$txtownername":"",
"ctl00$ContentPlaceHolder1$ddlZone":"1",
"ctl00$ContentPlaceHolder1$ddlSector":"2",
"ctl00$ContentPlaceHolder1$ddlBlock":"2",
"ctl00$ContentPlaceHolder1$btnFind":"Search",
"__VIEWSTATE":soup.find('input',{'id':'__VIEWSTATE'})["value"],
"__VIEWSTATEGENERATOR":"14039419",
"__EVENTVALIDATION":soup.find("input",{"name":"__EVENTVALIDATION"})["value"],
"__SCROLLPOSITIONX":"0",
"__SCROLLPOSITIONY":"0"}

b = a.post("https://mcfbd.com/mcf/FrmView_PropertyTaxStatus.aspx",headers = headers,data = payload).text
print(b)

以上是我的代码为这个网站。在

^{pr2}$

我检查了firebug,这些是表单数据的值。 但是这样做:

b = requests.post("https://mcfbd.com/mcf/FrmView_PropertyTaxStatus.aspx",headers = headers,data = payload).text
print(b)

引发此错误:

[ArgumentException]: Invalid postback or callback argument

我对通过请求提交表格的理解是否正确?在

1.打开firebug

2.提交表单

3.转到“网络”选项卡

4.在“网络”选项卡上选择“发布”选项卡

5.像上面的代码一样复制表单数据

我一直想知道怎么做。我可以使用selenium,但我想我应该尝试一些新的东西并使用请求


Tags: texthttpscomrequestsheaderspayloadsoupaccept
1条回答
网友
1楼 · 发布于 2024-05-16 13:10:44

您收到的错误是正确的,因为像VIEWSTATE这样的字段(以及其他字段)不是静态的或硬编码的。正确的方法如下:

创建请求会话对象。另外,建议使用包含USER-AGENT字符串的头来更新它-

headers = {"User-Agent": "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.101 Safari/537.36",}`
s = requests.session()

导航到指定的url-

^{pr2}$

使用BeautifulSoup4解析返回的html-

from bs4 import BeautifulSoup
soup = BeautifulSoup(r.content, 'html5lib')

使用硬编码值和动态值填充formdata-

formdata = {
   '__VIEWSTATE': soup.find('input', attrs={'name': '__VIEWSTATE'})['value'],
   'field1': 'value1'
}

然后使用session对象本身发送POST请求-

s.post(url, data=formdata)

相关问题 更多 >