У меня есть скрипт PyQt GUI, который состоит из виджета QWebView. Я пытаюсь отправить запрос GET, т. Е. Перейти на страницу, заполнить форму и нажать кнопку, используя код внизу этого вопроса.
Поскольку я имею дело с documentElement (QWebElement) веб-просмотра, мне нужно поместить все действия DOM в отдельную функцию (которую я назвал fillForm) и подключить сигнал loadFinished () к функции. Без подключения сигнала документ не будет загружен, и я не смогу получить нужные элементы.
Я могу правильно отправить форму и получить правильный ответ с веб-страницы.
Проблема, с которой я столкнулся, заключается в том, что вышеприведенное приводит к некоторому бесконечному циклу Это связано с тем, что веб-страница перезагружается при каждой загрузке новой страницы, поэтому форма заполняется каждый раз без остановки.
Я хотел бы знать, есть ли какой-нибудь способ узнать, загружена ли страница WebView полностью, не асинхронно или, возможно, приостановить выполнение скрипта (без остановки графического интерфейса пользователя), пока весь документ не загрузится. Я не могу найти удовлетворительное решение (моя идея состояла в том, чтобы сохранить глобальную переменную для отслеживания кликов) этой проблемы. Я был бы признателен, если бы кто-нибудь мог помочь мне с лучшим способом справиться с этим. Спасибо!
Вот код, который я использую
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from PyQt4.QtWebKit import *
from PyQt4 import QtCore
app = QApplication(sys.argv)
web = QWebView()
web.load(QUrl("http://mywebsite.com"))
def fillForm():
doc = web.page().mainFrame().documentElement()
searchform = doc.findFirst("input[type=text]")
searchform.setAttribute("value", "hello")
button = doc.findFirst("input[type=submit]")
button.evaluateJavaScript("click()")
QtCore.QObject.connect(web, QtCore.SIGNAL("loadFinished"), fillForm)
web.show()
sys.exit(app.exec_())