Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/412.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何通过QWebEngine在网页的输入文本字段中填写文本(来自C+;+;)?_Javascript_Html_Qtwebengine - Fatal编程技术网

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代码

  • 实际上,编写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"));