2016-05-23 2 views
2

QWebEngineでWebサイトをラップしたいので、Qtのイベントフィルタを使用して入力コマンドを調整することができます。問題のWebサイトにはユーザー名と電子メールとパスワードが必要です。私は最後にそのテキストの入力を処理し、Webページに入力する文字列を送信し、プログラム上でログインボタンを押してください同じページ。QWebEngineを通じてWebページの入力テキストフィールドにテキストを入力するにはどうしたらいいですか?

私はQWebChannelといくつかのカスタムjavascriptを使用することを提案して、this pageを見つけました。私は、私は、FirefoxのWebインスペクタツールを使用して記入したい要素の情報を取得する方法を知っているが、私はどのように

  1. パス私はQWebChannelを通じて実行されていると思いますカスタムJSコードには2つの文字列見当もつかない何とか

  2. は、実際にはURLパラメータまたはそのようないくつかありません

なく、私の管理下にウェブサイト上の特定の要素を見つけるために、JSコードを書き、私はPOSTリクエストがどのように見えるかを見ればそれは私が実際に "logブラウザ内では情報が何らかの形でエンコードされるため、実際に送信されたデータを複製することは現時点では実現可能ではないようです。

+0

[この質問とそれに対応する回答](http://stackoverflow.com/questions/36544403/communication-between-c-and-javascript-for-webgl)は、達成したいことの最初の部分を助けることができます(つまり、2つのQStringをJS側に渡します)。しかし、私はあなたが次に達成したいことについてはわかりません。少し明確にすることはできますか? – IAmInPLS

+0

プログラムでログイン資格情報を入力し、ログインボタンを押したがっています。 webengineviewの入力処理に頼ることはできません。なぜなら、私は別のシステム(これはリモコン付きのテレビ、つまりKodiアドオン)の入力を処理したいからです。 – rubenvb

答えて

2

私のログインページには、username、userpasswordという2つの変数があります。あなたのJSを評価するためにrunJavaScriptフォームQWebEnginePageを使用することができます。

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")); 

私のページに自動的にログインしてセッショントークンまたはクッキーを取得します。

+0

このコードは、ページが完全に読み込まれた後に実行する必要があります。それ以外の場合、JavaScriptはオブジェクトを見つけることができません。最良の解決法は、 'QWebEnginePage'の' loadFinished(bool) 'シグナルも使います。 – SuB

関連する問題