2012-05-12 8 views
6

Tengo un sitio web con formularios que necesito raspar. En lugar de rellenar los formularios flash, me gustaría POST algunas claves/valores a la URL que no admite las solicitudes GET.¿Cómo ejecutar una solicitud POST programáticamente en python con una GUI? (spynner, webkit ...)

utilizo spynner para interactuar con el sitio, y pueden tener un spynnerGUI, pero mi búsqueda en Google, stackoverflow, github spynner y en el módulo de spynner no tienen éxito.

Si spynner no se puede hacer una solicitud POST, tal vez gtk o qt + webkit puede hacer eso? Cualquier muestra de código de la vida real será realmente apreciada.

+1

Qt definitivamente tiene esa característica. Eche un vistazo a [QWebFrame # load] (http://doc.qt.nokia.com/4.7-snapshot/qwebframe.html#load-2) y [QNetworkRequest] (http://doc.qt.nokia.com /4.7-snapshot/qnetworkrequest.html) –

Respuesta

5

Puede hacerlo de esta manera 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

Muchas gracias por este Niklas B. –

+2

Y si queremos 'POST' una vez más en el mismo script, ¿cuál es la sintaxis? Si trato de ejecutar 'browser.webframe.load()' una vez más, aparece el siguiente error: "QNetworkReplyImplPrivate :: error: Problema interno, este método solo debe invocarse una vez". –

+1

@sputnick: obtengo este error solo si ejecuto 'load' dos veces seguidas sin esperar. ¿Llamaste a '_wait_load()' en el medio? –

Cuestiones relacionadas