Нажмите кнопку автоматически в веб-просмотре? - PullRequest
0 голосов
/ 19 ноября 2018

Я создал приложение с Webview и мне нужно нажать кнопку автоматически

Вариант использования: - открыть ссылку веб-ссылка и хотите автоматически нажать кнопку «Войти здесь» (вторая кнопка справа).

Я пытался использовать это: -

HTML-код с веб-сайта для кнопки «Войти здесь» был <input _ngcontent-c13="" style="padding: 2px" type="button" class="pri_btn" value="Login Here"> У него нет id или name , поэтому я попытался с именем класса, но ничего не произошло

String js = "javascript:(function(){"+
    "l=document.getElementByClassName('pri_btn');"+
    "e=document.createEvent('HTMLEvents');"+
    "e.initEvent('click',true,true);"+
    "l.dispatchEvent(e);"+
    "})()";
    webView.evaluateJavascript(js, new ValueCallback<String>() {
        @Override
        public void onReceiveValue(String s) {
            String result = s;

        }
    });

которые возвращают ноль.

Любая помощь будет оценена!

Ответы [ 2 ]

0 голосов
/ 29 ноября 2018

Вы, вероятно, хотели использовать метод с именем getElementsByClassName (обратите внимание на множественное число), который возвращает массив элементов.Поэтому ваш код должен выглядеть следующим образом:

String js = "javascript:(function(){"+
    "l=document.getElementsByClassName('pri_btn')[0];"+
    "l.click();"+
    "})()";
webView.evaluateJavascript(js, new ValueCallback<String>() {
    @Override
    public void onReceiveValue(String s) {
        String result = s;
    }
});

Кроме того, когда я попытался запустить эту функцию, во время перенаправления произошла ошибка SSL.Чтобы это исправить, вы должны переопределить метод onReceivedSslError() в вашем WebViewClient, например:

webView.setWebViewClient(new WebViewClient(){
    @Override
    public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
        if (handler != null){
            handler.proceed();
        } else {
            super.onReceivedSslError(view, null, error);
        }
    }
});

webView.getSettings().setDomStorageEnabled(true);

Редактировать: Проверка на наличие «входа» в значение элемента:

javascript:(function(){
tab = document.getElementsByClassName('pri_btn');
for(var i=0; i< tab.length; i++){
    if(tab[i].value.toLowerCase().indexOf("login") !== -1) return tab[i].click();
}
})()
0 голосов
/ 29 ноября 2018

нет метода с именем getElementByClassName .Это должно быть getElementsByClassName.Также getElementsByClassName возвращает массив, а не элемент DOM.Поэтому вы не можете использовать переменную l в качестве элемента.

Попробуйте это:

var loginBtns=document.getElementByClassName('pri_btn');
//assuming that there is only one element with class name pri_btn
loginBtns[0].click();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...