Обновление элементов QML WebEngineView и DOM
Я пытаюсь открыть URL-адрес Netflix с обновленными учетными данными ввода, используя JavaScript. Похоже, что ввод обновляется в форме HTML, но когда я запускаю кнопку входа, поля ввода становятся пустыми. Любой вклад ценится
WebEngineView {
id: webEngineView
focus: true
url: "https://www.netflix.com/de-en/login"
onLoadProgressChanged: {
if(loadProgress === 100){
webEngineView.runJavaScript("var input1 = document.getElementsByName('email');
input1[0].value =\"xxxxx@email.com\";",
function(result) { console.error("Email updated"); });
webEngineView.runJavaScript("var input2 = document.getElementsByName('password');
input2[0].value =\"*******\";",
function(result) { console.error("Password updated"); });
}
}
}
1 ответ
Вы, вероятно, используете неправильное имя элемента. Проверьте значение, возвращаемое document.getElementsByName
:
webEngineView.runJavaScript("document.getElementsByName('element-name')", function(element){
console.log(element);
});
Я советую вам использовать идентификатор элемента вместо имени. (а также document.getElementById()
соответственно). Вы можете найти идентификатор элемента с помощью инструментов разработчика (F12 в Chrome).
Правильный элемент id_userLoginId
но это все еще не работает. Я думаю, что проблема в странице Netflix. Может быть, некоторые стили или что-то еще... Интересно, что код прекрасно работает в консоли Chrome. Вот код, который отлично работает с Google:
import QtQuick 2.11
import QtQuick.Controls 2.4
import QtWebEngine 1.7
ApplicationWindow {
visible: true
width: 640
height: 480
title: qsTr("WebEngine Test")
WebEngineView {
id: webEngineView
focus: true
anchors.fill: parent
url: "https://www.google.com"
onLoadingChanged: {
if(loadRequest.status === WebEngineLoadRequest.LoadSucceededStatus)
{
webEngineView.runJavaScript("searchbox = document.getElementById(\"lst-ib\"); searchbox.value=\"Who Framed Roger Rabbit\";");
}
}
}
}
Еще один способ запустить собственный скрипт:
WebEngineView {
id: webEngineView
focus: true
anchors.fill: parent
url: "https://www.google.com"
userScripts: WebEngineScript {
injectionPoint: WebEngineScript.DocumentReady
sourceCode: "box = document.getElementById('lst-ib'); box.value = 'xxx';"
}
}
К сожалению, это также не работает с Netflix.