Reputation: 47
I habe a problem with my python script. I want to make an simple app that log in a person on a website automatically. This can be done with a QUrl and a QUrlQuery i think. It´s just that that a form in html does. OK now to my problem: When I try to print the QUrl with
print(login_url.toString(QUrl()))
, it just prints an empty line.
IServ.py
# -*- coding: utf-8 -*-
from PyQt5.QtCore import QUrl, QUrlQuery
from PyQt5.QtWidgets import QMessageBox
from PyQt5 import QtWidgets
import os
import Webview
import sys
def handle_url_changed():
if webView.url() == QUrl("https://the-server.de/iserv/login"):
login_url = QUrl
login_url.setUrl(QUrl(), "https://the-server.de/iserv/login_check")
# os.system("notify-send " + login_url.toString(QUrl()))
login_query = QUrlQuery
login_query.addQueryItem(QUrlQuery(), "Class", "login-form")
login_query.addQueryItem(QUrlQuery(), "Method", "post")
login_query.addQueryItem(QUrlQuery(), "_username", "...")
login_query.addQueryItem(QUrlQuery(), "_password", "...")
login_query.addQueryItem(QUrlQuery(), "_remember_me", "0")
login_url.setQuery(QUrl(), login_query())
webView.load(login_url())
print(login_url.toString(QUrl()))
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Webview.Ui_MainWindow()
ui.setupUi(MainWindow)
webView = ui.webView
webView.urlChanged.connect(lambda: handle_url_changed())
MainWindow.show()
sys.exit(app.exec_())
Webview.py
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'Webview.ui'
#
# Created by: PyQt5 UI code generator 5.10.1
#
# WARNING! All changes made in this file will be lost!
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5 import QtWebEngineWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(900, 700)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(MainWindow.sizePolicy().hasHeightForWidth())
MainWindow.setSizePolicy(sizePolicy)
MainWindow.setMinimumSize(QtCore.QSize(500, 625))
MainWindow.setFocusPolicy(QtCore.Qt.NoFocus)
MainWindow.setUnifiedTitleAndToolBarOnMac(True)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.gridLayout = QtWidgets.QGridLayout(self.centralwidget)
self.gridLayout.setObjectName("gridLayout")
self.webView = QtWebEngineWidgets.QWebEngineView(self.centralwidget)
self.webView.setUrl(QtCore.QUrl("https://the-server.de/"))
self.webView.setObjectName("webView")
self.gridLayout.addWidget(self.webView, 0, 0, 1, 1)
MainWindow.setCentralWidget(self.centralwidget)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "IServ"))
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
Upvotes: 2
Views: 473
Reputation: 243993
The main mistake is that you are not creating QUrl and QUrlQuery objects (or rather you are creating and deleting them instantly).
Also, it is better to create a class than to handle global variables to avoid having silent errors.
So I recommend you review your OOP notes.
Considering the above, the solution is:
# -*- coding: utf-8 -*-
import os
import sys
from PyQt5.QtCore import QUrl, QUrlQuery
from PyQt5.QtWidgets import QMessageBox
from PyQt5 import QtWidgets
import Webview
class MainWindow(QtWidgets.QMainWindow, Webview.Ui_MainWindow):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
self.setupUi(self)
self.webView.urlChanged.connect(self.handle_url_changed)
def handle_url_changed(self, url):
if url == QUrl("https://the-server.de/iserv/login"):
login_url = QUrl("https://the-server.de/iserv/login_check")
login_query = QUrlQuery()
login_query.addQueryItem("Class", "login-form")
login_query.addQueryItem("Method", "post")
login_query.addQueryItem("_username", "...")
login_query.addQueryItem("_password", "...")
login_query.addQueryItem("_remember_me", "0")
login_url.setQuery(login_query)
self.webview.load(login_url)
print(login_url.toString())
def main():
app = QtWidgets.QApplication(sys.argv)
w = MainWindow()
w.show()
sys.exit(app.exec_())
if __name__ == "__main__":
main()
Upvotes: 2