如何从qwebengineview qt5.9中提取数据

Posted

技术标签:

【中文标题】如何从qwebengineview qt5.9中提取数据【英文标题】:How extract data from qwebengineview qt5.9 【发布时间】:2017-08-10 14:26:17 【问题描述】:

我有一个简单的网页,我想提取文本 My First Heading。

<!DOCTYPE html>
<html>
<script type="text/javascript">

//This is a single line comment

/* This is a
block comment */

</script>
<body>

<h1 id="title">My First Heading</h1>
<p  id="text">My first paragraph.</p>
</body>
</html>

页面加载正常,但我的 runJavascript 函数不返回任何内容。 我尝试了不同的变化。我预期的调试输出应该是我的第一个标题。我错过了什么?

 QString path("C:\\Temp\\x.html");
 QFile file(path);
 QString source;
 file.open(QIODevice::ReadOnly);
 source = file.readAll();
 file.close();

 page = new QWebEnginePage();
 page->load(QUrl::fromLocalFile(path));
 ui->widget->setPage(page);
 ui->widget->setContextMenuPolicy(Qt::NoContextMenu);

 //page->runJavaScript("document.getElementById(title)", [](const QVariant&result) qDebug() << result.toString(););

//page->runJavaScript("document.getElementById(\"title\")", [](const QVariant&result) qDebug() << result.toString(););

//page->runJavaScript("document.getElementById('title')", [](const QVariant&result) qDebug() << result.toString(););

【问题讨论】:

如果您尝试从元素中获取字符串?比如document.getElementById('title').text 我试过我得到 js: Uncaught TypeError: Cannot read property 'text' of null 不确定是不是那个,但是有QWebEnginePage::loadQWebEnginePage::setHtml可能需要用第二个来设置页面的实际内容... 属性是 textContent,而不是 text,即 document.getElementById('title').textContent 不确定是否是问题所在。 我放弃了,我只使用了 qtdomdocument,只使用了 qwebviewengine 进行显示。 【参考方案1】:

文档说当页面内容完全加载时会发出一个信号:loadFinished。 所以我认为你应该把这个信号连接到一个自定义槽,只有在这个槽被调用之后,你才能访问页面的内容。

【讨论】:

感谢你们的帮助。它现在可以工作了,我将完成的负载连接到自定义慢速并使用 document.getElementById('title').textContent

以上是关于如何从qwebengineview qt5.9中提取数据的主要内容,如果未能解决你的问题,请参考以下文章

如何将 swf 文件从内存加载到 QWebEngineView

如何从 QWebEngineView 打印

如何从 Qt QWebEngineView 获取 HTTP 状态码?

如何从python的list中提想要的值

从 js QWebEngineView 获取变量到 python

从 QWebEngineView 获取 PDF 文件的链接