2012-05-12 7 views
6

Ich habe eine Website mit Formen, die ich brauche kratzen. Anstatt die flash Formulare zu füllen, möchte ich POST einige Schlüssel/Werte zu der URL, die GET Anfragen nicht unterstützt.Wie programmiere ich eine POST-Anfrage in Python mit einer GUI? (spynner, webkit ...)

I spynner verwenden, um mit der Website zu interagieren, und spynner ein GUI haben kann, aber meine Suche auf Google, Stackoverflow, spynner Github und im spynner Modul ist nicht erfolgreich.

Wenn spynner kann eine POST Anfrage nicht darum, vielleicht gtk oder qt + webkit kann das tun? Jedes reale Code-Beispiel wird wirklich geschätzt.

+1

Qt hat definitiv diese Funktion. Sehen Sie sich [QWebFrame # load] (http://doc.qt.nokia.com/4.7-snapshot/qwebframe.html#load-2) und [QNetworkRequest] (http://doc.qt.nokia.com) an /4.7-snapshot/qnetworkrequest.html) –

Antwort

5

Sie können es so mit Spynner tun:

import spynner 
from PyQt4.QtCore import QUrl 
from PyQt4.QtNetwork import QNetworkRequest, QNetworkAccessManager 

url = "http://localhost:8080/niklas/test.php" 
data = "foo=bar" 
headers = { "Content-Type": "application/x-www-form-urlencoded" } 

req = QNetworkRequest(QUrl(url)) 
for k, v in headers.items(): 
    req.setRawHeader(k, v) 

browser = spynner.Browser() 
browser.webframe.load(req, QNetworkAccessManager.PostOperation, data) 
browser._wait_load() 

print browser.html 
+0

Vielen Dank für dieses Niklas B. –

+2

Und wenn wir noch einmal im selben Skript 'POST' möchten, wie lautet die Syntax? Wenn ich versuche, 'browser.webframe.load()' noch einmal auszuführen, erhalte ich den folgenden Fehler: "QNetworkReplyImplPrivate :: error: Internes Problem, diese Methode muss nur einmal aufgerufen werden." –

+1

@sputnick: Ich bekomme diesen Fehler nur, wenn ich 'laden' zweimal hintereinander ohne zu warten. Hast du '_wait_load()' dazwischen aufgerufen? –