Заполните данные веб-сайта и нажмите кнопку и ответ на разбор
Я хочу, чтобы пользователи вводили номер автомобиля, а затем читали данные и показывали детали автомобиля пользователю. Я не хочу делать это в веб-обзоре. Я могу заполнить данные, используя этот код:
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);
});