gpt4 book ai didi

c++ - Qt - QWebView问题

转载 作者:行者123 更新时间:2023-11-28 03:53:30 27 4
gpt4 key购买 nike

我有一个由 QWebView 小部件组成的 PyQt gui 脚本。我正在尝试发送 GET 请求,即转到页面,填写表格并使用此问题底部的代码单击。

因为我正在处理 webview 的 documentElement(一个 QWebElement),所以我需要将所有 DOM 操作放在一个单独的函数(我将其命名为 fillForm)中并将 loadFinished() 信号连接到该函数中。如果不连接信号,文档将不会加载,我将无法获得我想要的元素。

我能够正确提交表单并从网页获得正确的响应。

我遇到的问题是,上面的内容导致了一种无限循环。这是因为每次加载新页面时都会重新加载网页,因此表格每次都会不停地填写。

我想知道是否有某种方法可以查明 WebView 的页面是否已完全加载、非异步加载或暂停脚本的执行(不卡住 gui)直到整个文档加载完毕。对于这个问题,我无法想出一个令人满意的解决方案(我的想法是保留一个全局变量来跟踪点击次数)。如果有人能用更好的方法帮助我解决这个问题,我将不胜感激。谢谢!

这是我正在使用的代码

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_())

最佳答案

构建“网络机器人”的相同问题

我发现这个解决方案使用 attesaLoop.exec(); 暂停所有和 webView_loadFinished 在页面加载文件时恢复执行

在头文件中声明

#include <QEventLoop>
QEventLoop attesaLoop;

在函数代码中

void MainWindow::naviga()
{
//--webView--webPage--webFrame--//--QWebElement--//
indirizzo = "http://www.google.it";
ui->webView->load(QUrl(indirizzo));

attesaLoop.exec();

ui->listWidget->addItem("fine caricamento");
frame = ui->webView->page()->mainFrame();
documento = frame->documentElement();
formInput = documento.findFirst("input[name=q]");
formInput.setAttribute("value","hallo");
bottone = documento.findFirst("input[type=submit]");
bottone.evaluateJavaScript("this.click()");

attesaLoop.exec();
}

void MainWindow::on_webView_loadFinished(bool)
{
//ui->listWidget->addItem(indirizzo);
attesaLoop.exit();
//esegui e;
//e.cerca(documento);
}

关于c++ - Qt - QWebView问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4528072/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com