繁体   English   中英

如何通过QWebEngine在网页的输入文本字段中填充文本(来自C ++)?

[英]How can I fill in text (from C++) in an input text field on a web page through QWebEngine?

我想在QWebEngine包装一个网站,以便我可以使用Qt的事件过滤器甚至更多来修改输入命令。 有问题的网站需要用户名/电子邮件和密码,我想确保自己可以处理该文本的输入,发送要在网页上填写的字符串,然后以编程方式按下登录按钮。同一页。

我找到了此页面 ,建议使用QWebChannel和一些自定义javascript来使其正常工作。 我知道如何通过Firefox的Web检查器工具获取要填写的元素的信息,但是我不知道如何

  1. 将两个字符串传递给我QWebChannel某种方式通过QWebChannel运行的自定义JS代码

  2. 实际编写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(); 
});

现在,只需调用您的登录按钮并模拟点击事件,发布事件...。

ui->webView->page()->runJavaScript(QString("document.getElementById("%1").click()).arg("example"));

我使用它来自动登录页面以获取会话令牌或cookie。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM