Заполните данные веб-сайта и нажмите кнопку и ответ на разбор

Я хочу, чтобы пользователи вводили номер автомобиля, а затем читали данные и показывали детали автомобиля пользователю. Я не хочу делать это в веб-обзоре. Я могу заполнить данные, используя этот код:

webView = (WebView) findViewById(R.id.webView1);
        webView.getSettings().setJavaScriptEnabled(true);
        webView.loadUrl("https://parivahan.gov.in/rcdlstatus/vahan/rcstatus.xhtml");
        webView.setWebViewClient(new WebViewClient() {
            public void onPageFinished(WebView view, String url) {
                String reg1="KA51X";
                String reg2="2442";
                 if(isFirstLoad) {
                     webView.loadUrl("javascript: {" +
                             "document.getElementById('convVeh_Form:tf_reg_no1').value = '" + reg1 + "';" +
                             "document.getElementById('convVeh_Form:tf_reg_no2').value = '" + reg2 + "';" +
                             "var frms = document.getElementsByName('convVeh_Form');" +
                             "frms[0].submit(); };");

                     isFirstLoad = false;
                 }
            }
        });

Вот веб-сайт, на котором отображаются данные для этого приложения.

https://parivahan.gov.in/rcdlstatus/vahan/rcstatus.xhtml

Теперь я пытаюсь нажать кнопку отправки, используя эту строку

 "frms[0].submit(); };");

и это,

"javascript:(function(){document.getElementById('convVeh_Form:j_idt21').click();})()"

но они не работают. Как нажимать кнопку с идентификатором

convVeh_Form: j_idt21

Кроме того, после нажатия кнопки, ответ будет получен с веб-сайта. Как прочитать этот текст ответа и поместить его в текстовое представление приложения.

Ответ 1

У вас есть отдельная проблема, convVeh_Form:j_idt21 - это всего лишь метка (на момент написания). Вы хотите convVeh_Form:j_idt27. Может быть, они изменились?

Возможно, вы захотите стилизовать введенный javascript и селектор как document.querySelector('[id="convVeh_Form:j_idt27"]').click().

Это означает, что : является специальным символом для селектора css.

webView = (WebView) findViewById(R.id.webView1);
webView.getSettings().setJavaScriptEnabled(true);
webView.loadUrl("https://parivahan.gov.in/rcdlstatus/vahan/rcstatus.xhtml");
webView.setWebViewClient(new WebViewClient() {
  public void onPageFinished(WebView view, String url) {
    String reg1 = "KA51X";
    String reg2 = "2442";
    if (isFirstLoad) {
      webView.loadUrl("javascript: {" +
        "document.getElementById('convVeh_Form:tf_reg_no1').value = '" + reg1 + "';" +
        "document.getElementById('convVeh_Form:tf_reg_no2').value = '" + reg2 + "';" +
        "document.querySelector('[id=\"convVeh_Form:j_idt27\"]').click(); };");

      isFirstLoad = false;
    }
  }
});

Вы также можете использовать button[type="submit"] в качестве селектора, если знаете, что это всегда будет первая кнопка, так что идентификаторы больше не имеют значения. (Возможно, они снова изменятся?)
Другие поля будут document.querySelectorAll('input[type="text"]')[0] и [1].

После отправки формы навигация изменится. Это вызывает событие, которое вы можете подключить, путем подкласса WebView. См. этот ответ для другого вопроса для примера.

private class HelloWebViewClient extends WebViewClient {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        // ...
    }
}

Используйте это как свое событие, определите URL-адрес в конечной точке и затем добавьте новый javascript для извлечения информации со страницы. Дайте мне знать, если вам нужна дополнительная помощь.

Ответ 2

Как я понял, правильный идентификатор convVeh_Form:j_idt26 вместо

"JavaScript: (функция() {document.getElementById( 'convVeh_Form: j_idt21') нажмите();})()"

Пожалуйста, проверьте мою ссылку , чтобы доказать ее

Итак, мое основное предложение - проверить ваш JS-код в браузере, прежде чем добавлять его в Android. Режим отладки в Chrome действительно хорош для этого, я уверен, что вы знаете, как его включить.

После этого, если вы уверены, что JS-код работает хорошо, добавьте код в Android по логическим блокам. Это может помочь вам отладить его.

Например, прежде всего поставьте следующие строки кода JS:

document.getElementById('convVeh_Form: tf_reg_no1'). value = 'text'        document.getElementById('convVeh_Form: tf_reg_no2'). value = 'text'

Если вы увидели результат на устройстве, вы должны добавить событие click.

document.getElementById( 'convVeh_Form: j_idt26'). Нажмите()

Он может отделить вашу JS-логику, и вы будете уверены, что на самом деле неправильно с кодом.

Относительно этой строки:

Кроме того, после нажатия кнопки, ответ будет получен с веб-сайта. Как прочитать этот текст ответа и поместить его в текстовое представление приложения.

Вы должны реализовать собственный WebViewClient() и переопределить onPageFinished и запустить JS-код только на правильной странице.

@Override
public void onPageFinished(WebView view, String url) {
    super.onPageFinished(view, url);
    if("https://parivahan.gov.in/rcdlstatus/vahan/rcstatus.xhtml".equals(url)) {
        // run JS
    } else if("response_link".equals(url)) {
        // notify user or any other logic
    }
}

Удачи!

P.S. Все JS-коды выше хорошо работают в браузере на моей стороне.

Ответ 3

Как нажать кнопку, Id которой является convVeh_Form: j_idt21

$('#convVeh_Form:j_idt21').click();

Как прочитать этот текст ответа и поместить его в текстовое представление приложения.? Если это представление формы, тогда для этого сообщения было бы проще использовать вызов ajax:

$.ajax({
   url: "http://your.url",
})
.done(function( data ) {
   $('#textview').text(data);
});