簡體   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