我尝试使用Python请求以编程方式在页面上填写表单。在
我为此写了一些代码:
#!/usr/bin/python
import requests
URL = 'https://www.acgov.org/ptax_pub_app/RealSearch.do'
payload = {
'displayApn': '1-123-1',
'showHistory': 'y',
}
s = requests.session()
r = s.post(URL, data=payload)
print r.status_code
print r.cookies
print r.text
然而,产出并没有如预期的那样出来。在
返回的状态码是200
Cookie正在打印为<RequestsCookieJar[]>
响应的文本有html标题,但只是一堆混乱的javascript:
这显然不是我想要的。我想获得当我在浏览器上手动提交表单时呈现的页面内容。在
经过一些浏览器检查后,当我手动发送表单时,以下请求头将被发布到服务器:
POST /ptax_pub_app/RealSearch.do HTTP/1.1
Host: www.acgov.org
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:66.0) Gecko/20100101 Firefox/66.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Referer: https://www.acgov.org/ptax_pub_app/RealSearch.do
Content-Type: multipart/form-data; boundary=---------------------------5784378851470632262085445332
Content-Length: 304
Connection: keep-alive
Cookie: TS744f9810_75=TS744f9810_rc=1&TS744f9810_id=2&TS744f9810_cr=08ae96f08bab280047871c302267d274621ba715eb672bba8c4e6326721d39c4e9275ba2573dd8ecb04e5fd2ed8b14de:08e8846af6032000365890ddfe7c40338b1c71881c3aa160e9b7511f898e727042a17ecd4e549128&TS744f9810_ef=&TS744f9810_pg=0&TS744f9810_ct=application/x-www-form-urlencoded&TS744f9810_bg=08ae96f08bab20007ed7e7334af2c3a0ddc2a737a8f76402a06229c2abec9c180de6732a86a9648608ba63d37c0a28007e212e36225cb10a4cd776ce268b7178b1d33e9bc0271ac4819eb499a739f93571208168c1d71d9c&TS744f9810_rf=https%3a%2f%2fwww.acgov.org%2fptax_pub_app%2fRealSearchInit.do%3fshowSearchParmsFromLookup%3dtrue; _ga=GA1.2.1302812812.1549499581; TSPD_101=08ae96f08bab280047871c302267d274621ba715eb672bba8c4e6326721d39c4e9275ba2573dd8ecb04e5fd2ed8b14de:; JSESSIONID=0000Im6xKN_53mKz4Iw5KNO5gR0:16hgu6tbb; TS01ed31ee=0129191c7e5fb1688bfcca5087fec2a194712c77706b9ba0027f29d8162a79cfc6c4aefe2136c8ca6d34cd2a1622154e5765f831e0e88ce369724f44b0e9f3ebe5c827a6011131434eedec5e04b97f4977a6091f7d; TS01ed31ee_77=08ae96f08bab2800dd88029ca6fb0fa267ec2a5e40e37cef6351b9876c3e34f6bb42cae44bc0afadbb819ab098f6e9b408de561ace82400034a3a6b4be45a224cb4595200fc21d5c6f05b9f72090ad9bf8cf1db9cef92af4944728ce98cc9906ca77cf3a81dbe502fadd7ae968c030f5b7e5f37a743d021e; ASP.NET_SessionId=db12w03jxf5pelnstiyf35jh; _gid=GA1.2.879815811.1551480793
Upgrade-Insecure-Requests: 1
Pragma: no-cache
Cache-Control: no-cache
我怀疑我的代码正在发送所有这些头文件。我甚至不知道其中的一些意味着什么,或者我如何在我的脚本中复制它们。有什么想法吗?在
您需要将有效负载作为multipart formdata发布,并且可以添加Referer头来告诉服务器请求来自表单。最重要的部分是您需要添加cookies。它们包含ASP.netsessionid和jsessionid等等。使用python请求执行此操作可能会变得非常复杂。在
如果您将其委托给浏览器,浏览器可以处理javascript、cookies、headers—由selenium自动处理。在
当您发布请求时,您只是缺少了站点正在寻找的一个元素;当您实际使用intended form page时,表单包含一个submit按钮:
您需要在帖子数据中包含该按钮,因为站点使用该字段来检测您是否进行了实际搜索:
^{pr2}$添加了这一项后,返回的页面包含查找的搜索结果:
在使用
showHistory
选项的capitalY
之前,不会包括历史记录(pplresultcontent5
表):相关问题 更多 >
编程相关推荐