Android JavaScript автозаполнение формы WebView - PullRequest
0 голосов
/ 01 мая 2018

С помощью этого кода я могу легко вставить имя пользователя и пароль автоматически на facebook.com
Цель состоит в том, чтобы автоматически вставить имя пользователя и пароль для каждого сайта, выбранного пользователем. Многие приложения делают это, но я не нашел пути. Спасибо за вашу помощь

@Override
public void onPageFinished(WebView view, String url) {
    super.onPageFinished(view, url);
    progressBar.setVisibility(View.GONE);
    String user = "user";
    String pwd = "pass";
    view.loadUrl("javascript:(function(){document.getElementsByName('email')[0].value='"
            + user
            + "';document.getElementsByName('pass')[0].value='"
            + pwd + "';document.getElementsByTagName('form')[0];})()");
}

Ответы [ 2 ]

0 голосов
/ 09 мая 2018

Как сказал Шпедиц, не все страницы входа используют один и тот же элемент name / id.

Как правило, большинство веб-сайтов используют type="email" или type="text" для имени пользователя, type="password" для пароля для входа в систему, и вы можете сделать проверку существования поля и выполнить внедрение после загрузки веб-страницы

view.loadUrl(
    "javascript:window.onload= (function(){"
    + "var selectElementName = document.querySelector('input[type=\"email\"]');"
    +"if(selectElementName){selectElementName.value =  \"" + user + "\";}"
    +"var selectElementName = document.querySelector('input[type=\"text\"]');"
    +"if(selectElementName){selectElementName.value =  \"" + user + "\";}"
    +"var selectElementpassword = document.querySelector('input[type=\"password\"]');"
    +"if(selectElementpassword){selectElementpassword.value =  \"" + pwd + "\";}"
    +"})();"
);

И это выше JavaScript в простом тексте для облегчения понимания:

window.onload= function(){

            var selectElementName = document.querySelector('input[type="email"]');
            if(selectElementName){selectElementName.value =  "username";}

            var selectElementName = document.querySelector('input[type="text"]');
            if(selectElementName){selectElementName.value =  "username";}

            var selectElementpassword = document.querySelector('input[type="password"]');
            if(selectElementpassword){selectElementpassword.value =  "password";}
 };
0 голосов
/ 09 мая 2018

Ваш код в настоящее время работает на facebook.com. Но при представлении нескольких сайтов вы должны реализовать проверку URL для этих конкретных сайтов, потому что вы не должны запускать все возможные сценарии в вашем WebView со всеми именами пользователей и паролями. * 1001 например *

if(url.contains("facebook.com")){ your facebook username & password injection code here }

Множество сценариев проистекают из того факта, что не каждая страница использует одинаковые имена / идентификаторы элементов для элементов входа в систему.

Если вы хотите, чтобы он работал на других сайтах, вам нужно, чтобы эти сайты были отдельно проверены и определены (внутри вашего приложения), чтобы увидеть, какие имена / идентификаторы используют элементы (насколько мне известно, нет способа автоматически найти формы входа из разные сайты), а затем делать один и тот же тип инъекций для каждого сайта.

В качестве дополнительного совета вы также можете упростить свой JavaScript, потому что вы, вероятно, больше не вызываете функцию при той же загрузке страницы.

view.loadUrl("javascript:document.getElementsByName('email')[0].value='"+ user+ "';document.getElementsByName('pass')[0].value='"+ pwd + "';document.getElementsByTagName('form')[0];");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...