我想在QWebEngine
中包装一个网站,这样我就可以使用Qt的事件过滤器调整输入命令,或许更多。有问题的网站需要用户名/电子邮件和密码,我想确保我可以在我的头端处理该文本的输入,发送要在网页上填写的字符串,然后以编程方式按下登录按钮同一页。
我找到this page,建议使用QWebChannel
和一些自定义JavaScript来实现此功能。我知道如何通过Firefox的Web Inspector工具获取我想要填写的元素的信息,但我不知道如何
将两个字符串传递给自定义JS代码我将以某种方式运行QWebChannel
实际编写JS代码,以便在不受我控制的网站上查找特定元素
没有url参数或者其他一些,如果我看看当我在浏览器中实际按下“登录”时发送的POST请求是什么样的,信息会以某种方式编码,因此复制实际发送的数据在这一点上似乎不可行。
答案 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。