Как программно ввести поля ввода формы в WebView, а затем нажать «Отправить»? - PullRequest
2 голосов
/ 26 августа 2011

У меня нет проблем с анализом WebView HTML или загрузкой URL-адресов (относительных или абсолютных), но я озадачен тем, как программно «смоделировать» пользователя, вводящего имя пользователя и пароль, затем нажимая кнопку отправки / входа в систему, учитываяследующий HTML:

<form method="post" class="mobile-login-form" id="login_form" action="https://www.example.com/login.php?m=m&amp;refsrc=http%3A%2F%2Fm.example.com%2F&amp;refid=0">
  <input type="hidden" name="lsd" autocomplete="off">
  <input type="hidden" name="post_form_id" value="1b3cf017c90d483cc50fcac3f2a9a283">
  <input type="hidden" name="charset_test" value="€,´,€,´,?,?,?">
  <input type="hidden" name="version" value="1">
  <input type="hidden" id="ajax" name="ajax" value="1">
  <input type="hidden" id="width" name="width" value="313">
  <input type="hidden" id="pxr" name="pxr" value="1.5">
  <input type="hidden" id="gps" name="gps" value="1">
  <div class="bgx msf" data-sigil="intfs">
    <div class="mfss fcg">Username:
    </div>
    <input class="input mobile-login-field" name="username" value="" type="text">
  </div>
  <div class="bgx msf" data-sigil="intfs">
    <div class="mfss fcg">Password:
    </div>
    <input class="input mobile-login-field" autocorrect="off" autocapitalize="off" name="pass" type="password">
  </div>
  <div class="bgx msf" data-sigil="intfs">
    <label class="btn btnC touchable" data-sigil="blocking-touchable">
      <input type="submit" value="Log In" class="mfss" name="login">
    </label>
  </div>
</form>

(я не контролирую этот HTML, это всего лишь пример для произвольного запроса веб-сайта)

Мне не нужно делать так называемую «тихую аутентификацию»«- Я просто хочу предоставить удобную комбинацию клавиш для пользователя, нажимающего кнопку вместо повторного ввода имени пользователя и пароля снова и снова (в случае выполнения clear cache или clear data).

Ответы [ 2 ]

1 голос
/ 26 августа 2011

Вы пробовали использовать инструменты обезьяны. Должен быть в состоянии выполнить эту задачу.

0 голосов
/ 26 августа 2011

Определите функцию JS на вашей html-странице и вызовите ее следующим методом.

 private void callJavaScriptFunction(String functionName, List<String> params) {
            String javaScript = "javascript:";

        javaScript += functionName + " ( ";

        if (params != null) {
                for(int i = 0; i < params.size(); i++) {
                        javaScript += params.get(i);

                        if (i != params.size() - 1) {
                                javaScript += ", ";
                        }
                }
        }

        javaScript += ");";

        Log.d(javaScript);

        webView.loadUrl(javaScript);
}
...