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

时间:2016-05-23 17:32:27

标签: javascript html qtwebengine

我想在QWebEngine中包装一个网站,这样我就可以使用Qt的事件过滤器调整输入命令,或许更多。有问题的网站需要用户名/电子邮件和密码,我想确保我可以在我的头端处理该文本的输入,发送要在网页上填写的字符串,然后以编程方式按下登录按钮同一页。

我找到this page,建议使用QWebChannel和一些自定义JavaScript来实现此功能。我知道如何通过Firefox的Web Inspector工具获取我想要填写的元素的信息,但我不知道如何

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

  2. 实际编写JS代码,以便在不受我控制的网站上查找特定元素

  3. 没有url参数或者其他一些,如果我看看当我在浏览器中实际按下“登录”时发送的POST请求是什么样的,信息会以某种方式编码,因此复制实际发送的数据在这一点上似乎不可行。

1 个答案:

答案 0 :(得分:4)

在我的登录页面中,我有两个变量:username,userpassword。您可以使用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。