- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个由 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/
我正在尝试使用 Qt4 在 VLC 的单独对话框中添加浏览器控件。我设法在打开对话框的菜单栏中添加了一个菜单项。 以下是我的代码: class DialogBrowser : public QDial
这些定义有什么区别? #include "QWebView" 类 QWebView; 最佳答案 class QWebView;是所谓的前向声明。这意味着,在完全声明类型之前,您无法访问类的详细信息(如
我尝试运行它,但没有任何反应。 void MainWindow::on_pushButton_2_clicked() { ui->webView->load(QUrl("javascript:
我正在编写一个显示文件夹中静态 HTML 文件的应用程序。出于某种原因,PyQt4 的 QWebView class 不允许渲染任何字体,即使对于远程网站: QWebView : Chrome : 我
如何防止 QWebView 加载图像(出于节省流量的原因)? 最佳答案 可以在 QWebView 的设置中禁用它: web_view = QWebView() web_view.settings().
右键单击使用 QWebView 查看的网页上的任何文本在 Windows 上选择光标下的单词。我想禁用此行为,但在文档中找不到任何引用。 最佳答案 这个偏好看起来很深入网络套件 (为 QWebView
我的应用程序包含一个继承 QWebView 的类。问题是每次我尝试在此 View 中输入内容时都会崩溃!这是我的代码: void QViewSupport::setupSupport(QWidget
我想处理失败的请求(例如,回复http 404错误代码),在QWebView中显示我自己的“notfound.html”页面。但是没有简单的方法来处理 QWebView/QWebPage 类的回复。
我正在尝试编写一个可以播放 Flash 列表的程序(例如,来自 YouTube 的)我正在使用 QWebview 来显示视频,该插件工作正常。 但是,我如何知道一个视频何时结束,以便我可以开始下一个?
我使用 QWebView.load(QUrl(myurl)) 打开一个网页,该网页获取一些输入并返回一个新的 php 生成的页面。 如果在 Firefox 中执行,浏览器会自动打开一个新选项卡/窗口来
我正在使用 Qt5.4.3,在某些时候,Qt 会打印出这样的消息 LEAK: 145 CachedResource LEAK: 4432 WebCoreNode 我尝试在 Qt 应用程序上显示网页,但
我正在使用 Qt 5.6,问题是 QWebView 没有出现在小部件框中。看起来小部件没有安装,但我还没有找到任何安装方法。 最佳答案 在 Qt 5.6 中你需要使用 QWebEngineView 然
即使我为 QWebView 设置了几何形状,它也会占据整个屏幕的左侧。 更糟糕的是,如果我最大化窗口,两个小部件之间会有间隙 下面是我写的代码: from PyQt4.QtGui import * f
我的 Qt 应用程序在 QWebView 小部件中加载外部 html 页面。如何定义自己的样式表来呈现页面内容?是否可以捆绑一个 .css 文件供 QWebView 提取? 最佳答案 您可以使用QWe
代码 News::News(QWidget *parent) : QDialog(parent), ui(new Ui::News) { ui->setupUi(this);
由于 QWebView() 可能在 Ubuntu 16.10 及以上版本中不可用,因此执行以下操作的替代可能性是什么: View = QWebView() view.load(QUrl('http:/
我想让 QWebView 看起来扩展到宽度和高度,以便理想情况下它没有滚动条。有些网站可能有固定的宽度,不允许这样做,但我不关心这些。无论如何,我不能如愿以偿,因为 QWebView 实现 sizeH
我在 Windows 8.1 上运行基于 Qt 5.3.1 的 QtCreator 3.2.0。 似乎无论我尝试加载什么网站,onLoadFinished 插槽总是返回 false。我尝试使用和不使用
好吧,我正在尝试使用 CSS 分页符属性打印具有多个页面的 QWebView,该属性适用于 WebKit。我正在使用 Qt 5.1.1。 我的主要问题是,当我使用 Qt 将其打印为 PDF 时,一切都
bool MainWindow::waitForLoad(QWebView& view) { QEventLoop loopLoad; QTimer timer; QObjec
我是一名优秀的程序员,十分优秀!