Обновление элементов QML WebEngineView и DOM - PullRequest
0 голосов
/ 25 сентября 2018

Я пытаюсь открыть 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 Ответ

0 голосов
/ 26 сентября 2018

Возможно, вы используете неправильное имя элемента.Проверьте значение, возвращаемое 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.

...