- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在将网页加载到 QWebEngineView
上。用户创建了不同类型的表格(报告),然后需要将这些表格作为网页保存到本地计算机。这是我尝试过的:
这里我使用了一个QWebEnginePage::save()
方法,但是没有任何反应:
connect(saveButton, &QPushButton::clicked, this, [this]()
{
engineWebView->page()->save("save.html");
});
然后我尝试了一个 QWebEngineProfile::download() 方法:
connect(saveButton, &QPushButton::clicked, this, [this]()
{
engineWebView->page()->download(engineWebView->page()->url(), "save");
});
connect(engineWebView->page()->profile(), &QWebEngineProfile::downloadRequested, this, [this](QWebEngineDownloadItem *download)
{
download->setPath("save.html");
download->accept();
});
在第二种解决方案中,我只能保存第一个加载的网页。没有动态创建的内容。
如何保存动态创建的数据?
#include <QApplication>
#include <QDebug>
#include <QFile>
#include <QHBoxLayout>
#include <QPushButton>
#include <QWebEngineProfile>
#include <QWebEngineView>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QWebEngineView *engine = new QWebEngineView;
QObject::connect(engine->page()->profile(), &QWebEngineProfile::downloadRequested, [](QWebEngineDownloadItem *download) {
download->setPath("download.html");
download->accept();
});
QPushButton *saveButton = new QPushButton("Save");
QObject::connect(saveButton, &QPushButton::clicked, [engine]()
{
engine->page()->save("save.html");
});
QPushButton *toHtmlButton = new QPushButton("ToHtml");
QObject::connect(toHtmlButton, &QPushButton::clicked, [engine]()
{
engine->page()->toHtml([](QString html){
QFile file("toHtml.html");
if (file.open(QFile::WriteOnly | QFile::Text))
{
QTextStream stream(&file);
stream << html;
file.waitForBytesWritten(-1);
file.close();
}
else
qDebug() << "Cannot create a file";
});
});
QPushButton *downloadButton = new QPushButton("Download");
QObject::connect(downloadButton, &QPushButton::clicked, [engine]()
{
engine->page()->download(engine->page()->url());
});
QHBoxLayout *hLyt = new QHBoxLayout;
hLyt->addWidget(saveButton);
hLyt->addWidget(toHtmlButton);
hLyt->addWidget(downloadButton);
QVBoxLayout *vLyt = new QVBoxLayout;
vLyt->addLayout(hLyt);
vLyt->addWidget(engine);
QWidget *mainWin = new QWidget;
mainWin->setLayout(vLyt);
mainWin->show();
// The url is an example for react usage. I am generating data using ReactJS that's why I use this example. What I need is to store the exact view of the dynamically generated calculator
engine->load(QUrl("https://ahfarmer.github.io/calculator/"));
return app.exec();
}
最佳答案
如果你想获得动态生成的 html,你可以使用 javascript 来获得 outerHTML
使用 runJavaScript()
的文档QWebEnginePage
的方法:
#include <QtWebEngineWidgets>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QWebEngineView *view = new QWebEngineView;
QPushButton *button = new QPushButton("Press me");
button->setEnabled(false);
QObject::connect(button, &QPushButton::clicked, [view]()
{
view->page()->runJavaScript("document.documentElement.outerHTML", [](const QVariant &v) {
QFile file("outerHTML.html");
if(!file.open(QFile::WriteOnly | QFile::Text)){
qDebug() << "Cannot create a file";
return;
}
QTextStream stream(&file);
stream << v.toString();
file.close();
});
});
QObject::connect(view, &QWebEngineView::loadFinished, [button](bool ok){
button->setEnabled(ok);
});
view->load(QUrl("https://ahfarmer.github.io/calculator/"));
QWidget w;
QVBoxLayout *lay = new QVBoxLayout(&w);
lay->addWidget(button);
lay->addWidget(view);
w.resize(640, 480);
w.show();
return app.exec();
}
关于c++ - 如何在QWebEngineView中保存动态生成的网页?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57351643/
好吧,我绞尽脑汁想弄明白 QWebEngine。 我理解实现虚拟功能的概念,但我不确定如何让用户点击的 url 成为页面或 View 请求的 newTab/newWindow 链接。 QWebEngi
当我使用以下代码浏览到一个页面时,结果是另一种语言(我认为是俄语)。当我在其他浏览器中浏览到相同的 url 时,我会按预期获得英文 404 页面。我尝试设置接受语言,但这没有帮助。我错过了什么? im
我在 PyQt5 和 Python 3.6 中使用 QWebEngineView 小部件。我想在加载页面时显示进度。出于演示目的,我只是使用打印语句来执行此操作(稍后我想让进度条小部件出现、显示进度并
我正在尝试使用 QWebEngineView 创建一个窗口,并在窗口关闭后删除 QWebEngineView。但是,QWebEngineView 似乎永远不会被删除,并且会继续运行我加载的任何 QUr
我有以下代码片段在 PySide 中工作,需要将其转换为在 PySide2 中工作。目的是在单击时强制所有链接在系统浏览器中打开(而不是小部件尝试加载它们): from PySide.QtWebKit
我正在将我的代码从 QtWebKit 转移到 QtWebEngine。总的来说,过渡相当顺利,但是,我被困在一个特定问题上。我使用 QWebEngineView 来显示 Google map 页面。一
如何在QWebEngineView中改变用户代理?我知道 QWebView 有一种方法可以做到这一点,但我没有找到 QWebEngineView 的解决方案。 最佳答案 在构建 QWebEngineP
如何检测 QWebEngineView 小部件中的鼠标点击? 我试过这个但不起作用: class MyWin(QtWidgets.QMainWindow): def __init__(self
我想编写一个程序来自动测试不同屏幕尺寸的网页尺寸。我使用 QWebEngineView 创建窗口,我需要模拟用户鼠标在网页中单击并拖放元素。我试过 qApp->sendEvent 和 qApp->po
我想开发一个桌面应用程序,该应用程序涉及每秒从串行端口接收地理坐标并实时添加到 map 中。该 map 应类似于以下链接: 我编写了一段代码来测试 Folium 执行此任务的能力。 import sy
我正在构建一个 pyqt5 桌面界面,我在其中使用 QWebEngineView 来显示一个 html 文件,其中我显示了 Leaflet map 。这工作正常。下一步是导出用户添加到 map 的所有
我有这部分工作,但我面临几个困难: 1) 看来 QWebEnginePage 需要一个 QWebEngineView。 (请参阅此处的 setView() 方法: https://code.woboq
我正在尝试在 Qt 中创建一个加载 URL 的对话框(我不想向最终用户公开,因此是一个对话框)。一旦用户在页面上输入了他们的凭据,服务器就会返回一个我想要捕获的重定向 URL。我怎样才能做到这一点?
有没有功能 QWebView 和 QWebEngineView 的区别?如果我理解正确,QWebView 是 webkit,而 QWebEngineView 是闪烁的。程序员有什么区别吗?一个比另一个
我来自 tkinter 背景,所有东西都可以放在框架中。 我怎样才能让我当前的工作代码结果(它启动一个页面的 WebEngine View ,在这个例子中是谷歌)位于主窗口中,如图所示?例如,我希望将
我来自 tkinter 背景,所有东西都可以放在框架中。 我怎样才能让我当前的工作代码结果(它启动一个页面的 WebEngine View ,在这个例子中是谷歌)位于主窗口中,如图所示?例如,我希望将
我最终想要完成的是捕获用户在网站中输入的用户名和密码。例如,如果用户在 Facebook 登录中输入“test@example.com”作为电子邮件地址,然后单击“提交”,我想将该电子邮件地址存储在我
我有一个简单的网页,我想提取文本 My First Heading。 //This is a single line comment /* This is a block comment */
也许这是一个错误。有一个顶级小部件必须有阴影。在那个小部件中,我想显示一个浏览器(只能呈现 html)。顶级小部件的不透明度必须是可调的。为了使投影效果如预期(不显示黑色边框),我们需要将 Qt::W
编辑:这不是重复的。链接的问题处理 CORS 安全问题,浏览器不允许您从不同来源加载脚本。我的问题与基本资源加载方案有关(file:/// vs qrc:/)。 我正在尝试使用 file:/// 方案
我是一名优秀的程序员,十分优秀!