2017-06-01 253 views
1

我想抓取一個網頁發送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) 

回答

0

我看到所有形式都隱藏字段這樣

<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

+0

謝謝!我糾正了那部分,我的程序填寫了表單(這些值標記爲「在HTML代碼中選中」),但仍然沒有得到表單的下一頁,就像程序沒有提交表單一樣...有一些想法?謝謝! –