问题标签 [qwebkit]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
4291 浏览

c++ - 用 C++ 解析 HTML(最好使用 Qt)

我正在尝试使用 C++ 解析一些 HTML 以从 HTML 中提取所有 url(这些 url 可以在 href 和 src 属性内)。

我尝试使用 Webkit 为我完成繁重的工作,但是由于某种原因,当我用 HTML 加载框架时,生成的文档全错了(如果我让 Webkit 从 Web 获取页面,生成的文档就好了,但 Webkit 也下载所有图像、样式和脚本,我不想要)

这是我试图做的:

我究竟做错了什么?有没有用 Qt 解析 HTML 的简单方法?(或其他一些轻量级库)

0 投票
3 回答
2348 浏览

qt - 如何更改qwebview的背景图片、颜色和字体颜色

我想更改我的 webview 的背景图像、颜色和字体颜色。我尝试了 setBackgroundRole 方法,但它只有很少的颜色。它没有我想要的颜色。而且我找不到如何设置字体颜色和背景图像。你有什么想法来解决这个问题吗?

0 投票
1 回答
392 浏览

qtwebkit - QtWebKit QApplication 调用两次

我正在从 Flask 调用一个抓取类,并且第二次实例化一个新的 Webkit() 类(QApplication)时,它会退出我的 Flask 应用程序。

如何多次重新运行 Qt GUI 应用程序并将其包含在内,这样它就不会关闭“外部”应用程序?

进一步说明,Qt 是事件驱动,调用 QApplication.quit() 不仅会关闭事件循环,还会关闭 Python。尽管永远不会继续执行其余代码,但不调用 quit()。

0 投票
2 回答
4611 浏览

qt - 如何阻止 QHttp/QtWebKit 缓存页面

最近我发现我可以修改一个在线存储的 txt 文件,然后当我使用QHttp获取它时,我仍然得到以前的版本。我的代码也使用了QtWebKit,所以这可能与问题有关吗?或者,也许我只是缺少一个阻止缓存的设置?

(我在 Windows 7 下使用 Qt 4.7.3 并使用 Visual Studio 2010 插件进行编译)

我正在执行以下操作以防止QtWebKit缓存任何内容-

我用来加载 txt 文件的代码如下 -

我用来对应的插槽是 -

但是,一旦它从互联网上获取了 txt 文件,它似乎就会在某处/以某种方式缓存它。无论我在 txt 文件中进行什么更改,当我运行我的代码时,它仍然会缓冲原始文件。

我已经尝试过 OrcunC 的建议(如下),但这会导致收到一个空字符串,而不是 txt 文件的内容 -

我还尝试以不同的方式实现它,如下所示,但得到的结果与缓存 txt 文件相同。即使使用bool fromCache = reply->attribute( QNetworkRequest::SourceIsFromCacheAttribute ).toBool( )检查已完成插槽中的QNetworkReply,但返回false

我现在已经无能为力了,所以非常感谢任何人指出我正确的方向。

0 投票
2 回答
7264 浏览

javascript - QWebFrame addToJavaScriptWindowObject() 对象在 Javascript 中未定义

我又开始深入研究 C++ 和 Qt,并且一直在研究 WebKit Javascript/Qt 绑定。我的所有活动部件都在工作,除了我的 QObject 子类在 Javascript 端是“未定义的”。这是我遇到问题的简单测试应用程序:

我的主窗口实现:

你好.cpp

你好.h

上面提到的 index.html 文件做了一个简单的alert(Hello.say())调用,但是这样做typeof Hello,我得到了 undefined。

我对 C++ 有点生疏,而且对 Qt 很陌生,所以我确信这是一个菜鸟错误,但我很难过。

0 投票
1 回答
415 浏览

javascript - QWebKit - 运行页面的 javascript 函数?

基本上我想进入我的路由器设置,
设置一个检查按钮,然后在页面上调用一个函数,
所有这些都是以编程方式进行的。

我知道执行此操作的所有 javascript,
并且可以通过 Google Chrome 控制台执行此操作。

我可以通过 QWebKit 在语法上执行它,
但实际页面不受影响。

(是的,此代码要求我已经登录到我的路由器设置)
我知道 JavaScript 正在运行,因为我可以使用警报对其进行测试。

但是,路由器的 html“checked()”函数或复选框不会运行/更改。
就像我实际上并没有与页面交互,而是与副本交互。

我在这里犯了一个严重的新手错误吗?


规格:
python 2.7
PyQt4
QWebKit
Windows 7

0 投票
1 回答
1826 浏览

qt4 - Signal QWebPage::loadFinished(bool) 返回两次?

我遇到了 QWebPage::loadFinished (bool) 信号的问题,它回调了两次,这正常吗?(根本没有链接,例如HTTP状态302)

考虑下面的代码,整个事情可能会导致问题,试图在该插槽中加载另一个链接,这会是一个问题吗?

如果我qDebug() << thisUrl;每次在loadFinished(bool)slot 中执行一次,我可以看到 3 次,这是正常的吗,一次用于 url XXX,两次用于 url YYY,最后两个链接完全相同。

0 投票
1 回答
675 浏览

qt - 是否值得使用 QTextBrowser 在后台解析和修改 HTML 页面而不是 QWebPage?

纯粹出于学习 C++ 和 Qt 的目的,我正在编写一个基于 Qt 的小程序,它从本地目录读取 HTML 文件(最多数百个),修改它们并将它们写回另一个本地目录。

QWebPage我的第一次尝试是使用QWebElement. 但是,我遇到了一些由内存泄漏引起的严重问题QWebPage(这很可能是由于我没有正确使用它造成的。但这是另一个主题,而不是这个问题的一部分)。

到目前为止,我没有使用任何 GUI,尽管我打算稍后再这样做,但我的程序的这一部分永远不会成为 GUI 的一部分,而是在后台的某个地方。
因此,我想替换QWebPageby的用法QTextBrowser,这似乎更轻量级。但是,我在 Qt-API 中找不到类似于QWebElement. 到目前为止,我的代码依赖于QWebElement::findFirst()QWebElement::nextSibling()最后QWebElement::takeFromDocument()

QTextBrowser那么,作为 HTML 解析器实现(或使用)是否有几乎无痛的可能性?甚至可能是“最佳实践”?
我不需要评估任何 JavaScript,尽管它很可能内联在 HTML 页面中。我也不需要使用 CSS 进行样式设置,尽管它在相关的 HTML 页面中被大量使用。我只需要根据它们的 id 或 CSS 类检索某些 HTML 块(作为表格行)。

PS:我只愿意使用现有的 C++ HTML 解析库,以防所有使用纯 Qt 的可行和合理尝试都失败。

PPS:只是为了看到和了解它们,我也想得到现在非凡的解决方案。;-)


这是我当前代码的一部分,我在其中使用QWebElement. reportPage是一个QWebPage对象。

0 投票
1 回答
530 浏览

c++ - QWebFrame::setHtml 后崩溃

我正在尝试将 html 内容动态设置为主线程中的文档节点。

这些行正常执行,但之后我得到调用堆栈的读取访问冲突

任何问题的谷歌搜索或堆栈溢出都没有成功。其他人有同样的问题吗?QWebFrame::setHtml 的正确用法是什么?

谢谢

[已解决] 不是从主线程调用 QWebFrame::setHtml 时会发生此问题。

0 投票
2 回答
4259 浏览

python - 如何使 QWebView/QWebPage 默认为衬线字体?

使用 PyQt4,我创建了一个 QWebView,然后使用它的 setHtml() 方法加载它。HTML 在大多数方面都能正确显示,但始终使用默认的无衬线字体。

当外部浏览器(例如 Firefox)加载相同的 HTML 纯文本时,它会以默认的衬线字体显示。我希望 webview 也这样做。

我已经阅读了 QWebView、QWebPage 和 QWebSettings 的文档,但没有看到任何设置默认“标准”或“比例”字体的方法,可与浏览器的首选项设置相媲美。我查看了 QStyleSheets,但它们似乎不适用于 QWebView/WebPage。