Javascript 如何通过QWebEngine在网页的输入文本字段中填写文本(来自C+;+;)?
我想在Javascript 如何通过QWebEngine在网页的输入文本字段中填写文本(来自C+;+;)?,javascript,html,qtwebengine,Javascript,Html,Qtwebengine,我想在QWebEngine中包装一个网站,这样我就可以使用Qt的事件过滤器调整输入命令,甚至更多。有问题的网站需要用户名/电子邮件和密码,我想确保我能够处理输入的文本,发送要在网页上填写的字符串,然后以编程方式按下同一页上的登录按钮 我发现,建议使用QWebChannel和一些自定义javascript来实现这一点。我知道如何通过Firefox的Web Inspector工具获取我想要填写的元素的信息,但我不知道如何填写 将两个字符串传递给我将通过QWebChannel运行的自定义JS代码 实际
QWebEngine
中包装一个网站,这样我就可以使用Qt的事件过滤器调整输入命令,甚至更多。有问题的网站需要用户名/电子邮件和密码,我想确保我能够处理输入的文本,发送要在网页上填写的字符串,然后以编程方式按下同一页上的登录按钮
我发现,建议使用QWebChannel
和一些自定义javascript来实现这一点。我知道如何通过Firefox的Web Inspector工具获取我想要填写的元素的信息,但我不知道如何填写
QWebChannel
运行的自定义JS代码没有url参数或类似的参数,如果我查看在浏览器中实际按下“登录”时发送的POST请求的外观,信息会以某种方式进行编码,因此复制实际发送的数据在这一点上似乎不可行。在我的登录页面中,我有两个变量:用户名、用户密码。您可以使用runJavaScript表单QWebEnginePage来评估js:
ui->webView->page()->runJavaScript(QString("document.getElementById('username').value = '%1'").arg("example"));
ui->webView->page()->runJavaScript(QString("document.getElementById('password').value = '%1'").arg("example"));
要按用户获取插入的文本,可以使用:
ui->webView->page()->runJavaScript(QString("document.getElementById('username').value"),
[this](const QVariant& res) {
qDebug() << "Username = " << res.toString();
});
我使用它来自动登录我的页面,以获取会话令牌或cookie。可以帮助您实现您想要实现的第一部分(即将两个QString传递到JS端)。然而,我不确定你下一步想要实现什么。你能澄清一下吗?我想以编程方式输入登录凭据并按下登录按钮。我不能依赖webengineview输入处理,因为我想通过一个单独的系统来处理输入(它适用于带有遥控器的电视,即Kodi插件)。此代码应该在页面完全加载后运行,否则JavaScript找不到任何对象。最好的解决方案是使用
loadFinished(bool)
QWebEnginePage的信号。
ui->webView->page()->runJavaScript(QString("document.getElementById("%1").click()).arg("example"));