2012-05-12 14 views
6

Ho un sito web con moduli che ho bisogno di scrapare. Invece di compilare i moduli flash, desidero specificare POST alcune chiavi/valori per l'URL che non supporta le richieste GET.Come eseguire una richiesta POST a livello di codice in python con una GUI? (spynner, webkit ...)

Io uso spynner di interagire con il sito, e spynner può avere un GUI, ma la mia ricerca su google, StackOverflow, github spynner e nel modulo spynner sono riuscito.

Se spynner non si può fare una richiesta POST, forse gtk o qt + webkit può farlo? Ogni campione di codice di vita reale sarà davvero apprezzato.

+1

Qt ha sicuramente questa caratteristica. Dai un'occhiata a [QWebFrame # load] (http://doc.qt.nokia.com/4.7-snapshot/qwebframe.html#load-2) e [QNetworkRequest] (http://doc.qt.nokia.com /4.7-snapshot/qnetworkrequest.html) –

risposta

5

Si può fare in questo modo con Spynner:

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

Grazie mille per questo Niklas B. –

+2

E se vorremmo 'POST' ancora una volta nello stesso script, qual è la sintassi? Se provo a eseguire 'browser.webframe.load()' ancora una volta, visualizzo il seguente errore: "QNetworkReplyImplPrivate :: error: problema interno, questo metodo deve essere chiamato una volta sola". –

+1

@sputnick: ottengo questo errore solo se eseguo 'load' due volte di seguito senza aspettare. Hai chiamato '_wait_load()' in mezzo? –

Problemi correlati