To get the form data in a dict , it is better to use unquote_plus from the python standard library as (unlike QUrl ), it can handle plus signs as well as percent encoding.
To close the window, you can emit the formSubmitted signal from the web page and connect it to the handler in the main window. This handler can then call close() in the main window, do all the processing of the form data, and then finally the quit() application.
To remove the border around the page, set the contentsMargins main layout to zero.
Here is a revised version of your script that implements the following ideas:
import sys from urllib import unquote_plus from PyQt4.QtCore import * from PyQt4.QtGui import * from PyQt4.QtWebKit import * class MyWebPage(QWebPage): formSubmitted = pyqtSignal(QUrl) def acceptNavigationRequest(self, frame, req, nav_type): if nav_type == QWebPage.NavigationTypeFormSubmitted: self.formSubmitted.emit(req.url()) return super(MyWebPage, self).acceptNavigationRequest(frame, req, nav_type) class Window(QWidget): def __init__(self, html): super(Window, self).__init__() self.setWindowFlags(Qt.FramelessWindowHint) view = QWebView(self) layout = QVBoxLayout(self) layout.addWidget(view) layout.setContentsMargins(0, 0, 0, 0) view.setPage(MyWebPage()) view.setHtml(html) view.page().formSubmitted.connect(self.handleFormSubmitted) def handleFormSubmitted(self, url): self.close() elements = {} for key, value in url.encodedQueryItems(): key = unquote_plus(bytes(key)).decode('utf8') value = unquote_plus(bytes(value)).decode('utf8') elements[key] = value
source share