2012-05-12 6 views
6

У меня есть сайт с формами, которые мне нужны, чтобы scrape. Вместо заполнения форм flash я хотел бы указать POST некоторые ключи/значения для URL-адреса, который не поддерживает запросы GET.Как выполнить POST-запрос программно в python с графическим интерфейсом? (spynner, webkit ...)

Я использую spynner взаимодействовать с сайтом, и spynner может иметь GUI, но мой поиск в Google, StackOverflow, spynner GitHub и в модуле spynner неудачны.

Если spynner не может сделать POST запрос, может быть gtk или qt + webkit может сделать это? Любой образец кода реальной жизни будет действительно оценен.

+1

Qt, безусловно, имеет ту особенность. Посмотрите на [QWebFrame # load] (http://doc.qt.nokia.com/4.7-snapshot/qwebframe.html#load-2) и [QNetworkRequest] (http://doc.qt.nokia.com /4.7-snapshot/qnetworkrequest.html) –

ответ

5

Вы можете сделать это, как это с 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

Большое спасибо за этот Niklas B. –

+2

И если мы хотели бы «POST» еще раз в том же скрипте, что такое синтаксис? Если я попытаюсь запустить 'browser.webframe.load()' еще раз, я получаю следующую ошибку: «QNetworkReplyImplPrivate :: error: Внутренняя проблема, этот метод нужно вызывать только один раз». –

+1

@sputnick: Я получаю эту ошибку, только если я запускаю 'load' дважды подряд без ожидания. Вы называли '_wait_load()' между ними? –