Python:发送POST请求不起作用
问题描述:
我想抓取一个网页发送POST来填写表格,一般我用硒来刮一个页面,但我最近读到发送POST请求是一个更好刮去结果的方式。无论如何,我遵循一些指令来制作我的代码,但是当我发布我的数据时,我获得了填充表单的同一页面(POST不提交表单),我做错了什么?同样的页面在第一页之后还有另一种填充形式,所以如果我填充第一种形式,我真的不知道如何保持这种响应以获得最终响应,所以如果有人可以帮助一些想法,我会回想欣赏它!谢谢,我包括我的代码和我在寻找刮最终报价的页面:Python:发送POST请求不起作用
https://www.santander.cl/cotizador-web/
import requests, lxml.html
import time
s = requests.session()
login = s.get('https://www.santander.cl/cotizador-web/cotizador/pasosSolicitud.xhtml')
login_html = lxml.html.fromstring(login.text)
hidden_inputs = login_html.xpath(r'//form//input[@type="hidden"]')
form = {x.attrib["name"]: x.attrib["value"] for x in hidden_inputs}
form['pasosForm:marcas']='27'
form['pasosForm:modelos']='1978'
form['pasosForm:ano']='2015'
form['pasosForm:uso']='1'
form['pasosForm:j_id93373712_1a32e354_input']='on'
form['formDialogCotiSelec:j_id216370348_64c01a10_active'] = '1'
form['javax.faces.partial.execute']='pasosForm pasosForm:siguiente1'
response = s.post('https://www.santander.cl/cotizador-web/cotizador/pasosSolicitud.xhtml', data=form)
print(response.text)
答
我看到所有形式都隐藏字段这样
<input type="hidden" name="javax.faces.ViewState"
id="javax.faces.ViewState" value="zDmSF7aJ4QSdyqjY5D4dGbfEaQr5OiS6WorNARY6pfHWSXIe/APb5e
/wcHsiGvPVaXW4IFpVHFyFHNSSJMPdHt2mhaYm4TQ9WPo+TQgWFTB1ZRE1wwiJtXQfmKuwE2+R+iRmONBAmZCR9E8x" />
这是CSRF令牌并从当前会话生成。你应该访问(创建会话)的表单页面,然后再发布请求。
此处了解详情:
https://www.owasp.org/index.php/Cross-Site_Request_Forgery_%28CSRF%29_Prevention_Cheat_Sheet
谢谢!我纠正了那部分,我的程序填写了表单(这些值标记为“在HTML代码中选中”),但仍然没有得到表单的下一页,就像程序没有提交表单一样...有一些想法?谢谢! –