2012-05-12 22 views
6

Tôi có một trang web với các mẫu mà tôi cần phải cạo. Thay vì điền các mẫu flash, tôi muốn POST một số khóa/giá trị cho URL không hỗ trợ yêu cầu GET.Làm thế nào để chạy một yêu cầu POST lập trình trong python với GUI? (spynner, webkit ...)

tôi sử dụng spynner để tương tác với các trang web, và spynner có thể có một GUI, nhưng tìm kiếm của tôi trên google, stackoverflow, spynner github và trong module spynner không thành công.

Nếu spynner không thể thực hiện yêu cầu POST, có thể gtk hoặc qt + webkit có thể làm điều đó? Bất kỳ mẫu mã thực tế nào sẽ được đánh giá cao.

+1

Qt chắc chắn có tính năng đó. Hãy xem [QWebFrame # load] (http://doc.qt.nokia.com/4.7-snapshot/qwebframe.html#load-2) và [QNetworkRequest] (http://doc.qt.nokia.com /4.7-snapshot/qnetworkrequest.html) –

Trả lời

5

Bạn có thể làm điều đó như thế này với 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

Cảm ơn rất nhiều vì Niklas B. –

+2

Và nếu chúng ta muốn 'POST' thêm một lần nữa trong cùng một tập lệnh, cú pháp là gì? Nếu tôi cố gắng chạy 'browser.webframe.load()' một lần nữa, tôi nhận được lỗi sau: "QNetworkReplyImplPrivate :: error: Vấn đề nội bộ, phương thức này chỉ được gọi một lần." –

+1

@sputnick: Tôi gặp lỗi này chỉ khi tôi chạy 'tải' hai lần liên tiếp mà không cần chờ đợi. Bạn đã gọi '_wait_load()' ở giữa? –

Các vấn đề liên quan