2017-06-01 15 views
1

Ich versuche, eine Webseite zu schaben senden POST zu füllen ein Formular, in der Regel verwende ich Selen, um eine Seite mit Python zu kratzen, aber ich habe kürzlich gelesen, dass das Senden einer POST-Anfrage ist eine bessere Weg, um Ergebnisse zu kratzen. Wie auch immer, ich befolgte einige Anweisungen für meinen Code, aber wenn ich meine Daten poste, bekomme ich die gleiche Seite mit dem Formular ausgefüllt (der POST reicht das Formular nicht ein), was mache ich falsch? Auch die selbe Seite hat eine andere Form nach der ersten zu füllen, also wenn ich die erste Form erfülle, weiß ich wirklich nicht, wie ich diese Antwort halten soll, um die endgültige Antwort zu bekommen, also wenn jemand mit einigen Ideen helfen kann, würde ich es tun bin dankbar! Dank und ich schließe meinen Code und die Seite, die ich für schaben die endgültige Angebot suchen:Python: Senden POST Anfrage funktioniert nicht

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) 

Antwort

0

Ich sehe, dass alle Formen wie Feld versteckt haben dieses

<input type="hidden" name="javax.faces.ViewState" 
id="javax.faces.ViewState" value="zDmSF7aJ4QSdyqjY5D4dGbfEaQr5OiS6WorNARY6pfHWSXIe/APb5e 
/wcHsiGvPVaXW4IFpVHFyFHNSSJMPdHt2mhaYm4TQ9WPo+TQgWFTB1ZRE1wwiJtXQfmKuwE2+R+iRmONBAmZCR9E8x" /> 

Es ist csrf Token und aus der aktuellen Sitzung generiert. Sie sollten die Formularseite besuchen (Sitzung erstellen), bevor Sie eine Postanforderung stellen.

Mehr Infos hier:

https://www.owasp.org/index.php/Cross-Site_Request_Forgery_%28CSRF%29_Prevention_Cheat_Sheet

+0

Dank! Ich korrigiere diesen Teil und mein Programm füllt das Formular (die Werte sind wie markiert "im HTML-Code ausgewählt), aber immer noch nicht die nächste Seite des Formulars, ist wie das Programm nicht das Formular einreichen ... Sie habe eine Idee? Danke! –

Verwandte Themen