Заполните поля в веб-просмотре автоматически

Я видел этот вопрос в Интернете, но пока не нашел рабочего решения. В принципе, я хочу загрузить свое приложение и нажать кнопку; Действие кнопки затем заполнит имя пользователя и пароль на веб-сайте, уже загруженном в веб-просмотр (или дождаться onPageFinished). Наконец, кнопка отправки на странице входа будет активирована.

Из того, что я понимаю, это можно сделать, выполнив java-инъекцию с loadUrl (javascript), но я не знаю, какие команды java будут заполнять поля. Тот же вопрос был задан для iOS , но команды немного отличаются.

Можно ли делать то, что я прошу, с помощью javascript в веб-браузере, или мне нужно делать http-сообщение без веб-просмотра, как это или это ?

Большое вам спасибо за любую помощь, которую вы можете дать!

Solutions Collecting From Web of "Заполните поля в веб-просмотре автоматически"

Вам не нужно использовать «java-команды» … но вместо этого JavaScript … например:

String username = "cristian"; webview.loadUrl("javascript:document.getElementById('username').value = '"+username+"';"); 

Таким образом, в основном, что вам нужно сделать, это большая строка кода JavaScript, которая получит эти поля и добавит значения на них; Кроме того, вы можете включить / отключить кнопку отправки с помощью JavaScript.

Спасибо всем за ваш ответ, это помогло мне, но не сработало.

Это всегда открывало белую страницу, пока я не нашел это:

https://stackoverflow.com/a/25606090/3204928

Итак, здесь полное решение, смешивающее всю информацию, найденную здесь и там:

1) в первую очередь вам нужно включить хранилище DOM, если вы этого не сделаете, GetElementByXXX ничего не вернет (вы должны сделать это перед загрузкой страницы)

 myWebView.getSettings().setDomStorageEnabled(true); 

2) Ваш последний Javascript-вызов GetElementByXXX ДОЛЖЕН сохранить результат в переменной

Пример 1:

 _webview.loadUrl("javascript:var uselessvar =document.getElementById('passwordfield').value='"+password+"';"); 

Здесь только один вызов (только одна точка с запятой), поэтому мы немедленно сохраняем результат в «бесполезном»

Пример 2: см. Ответ пользователя802467

Здесь есть 3 вызова (один для поля входа, один для поля пароля, один для отправки кнопки), только последний вызов нужно хранить, это делается в 'frms'

Программисты Javascript должны легко объяснить это поведение …

Надеюсь, это поможет

Это помогло мне заполнить формы и представить форму:

 webView.loadUrl("javascript: {" + "document.getElementById('username').value = '"+uname +"';" + "document.getElementById('password').value = '"+password+"';" + "var frms = document.getElementsByName('loginForm');" + "frms[0].submit(); };"); 

Вот полный код, который работает для меня ( Bitbucket ):

 webView.getSettings().setJavaScriptEnabled(true); webView.getSettings().setDomStorageEnabled(true); webView.loadUrl("http://example.com/"); webView.setWebViewClient(new WebViewClient(){ @Override public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); final String password = "password"; final String username = "username"; final String answer = 5; final String js = "javascript:" + "document.getElementById('password').value = '" + password + "';" + "document.getElementById('username').value = '" + username + "';" + "var ans = document.getElementsByName('answer');" + "ans[0].value = '" + answer + "';" + "document.getElementById('fl').click()"; if (Build.VERSION.SDK_INT >= 19) { view.evaluateJavascript(js, new ValueCallback<String>() { @Override public void onReceiveValue(String s) { } }); } else { view.loadUrl(js); } } 

});

Я попробовал решение @ user802467. Но было другое поведение в двух вещах

  1. Если я сохранил ТОЛЬКО последний javascript-вызов в переменной, он не заполнял поля. Вместо этого, если я сохранил все три вызова в переменных, это
  2. По какой-то причине моя форма не отправлялась с помощью submit (). Но вместо отправки формы, если я нажал кнопку отправки с помощью button.click (), мне не нужно было хранить все три вызова, и все сработало отлично!

Вот что я использовал (но не работал)

 view.loadUrl("javascript: var x = document.getElementById('username').value = '" + username + "';" + "var y = document.getElementById('password').value = '" + password + "';" + "var form1 = document.getElementById('loginform');" + "form1[0].submit(); "); 

Вот код, который работал для меня

 view.loadUrl("javascript: document.getElementById('username').value = '" + username + "';" + " document.getElementById('password').value = '" + password + "';" + "var z = document.getElementById('submitbutton').click();" );