网站搜索

javascript - 我如何在 Android Studio 的 WebView 中自动填充网站的字段/表单?


我想自动填充,例如 Facebook 的登录字段(电子邮件和密码)或 Google 的搜索字段。我已经浏览了许多关于自动填充的问题,包括这个。

这是我目前的代码,它会在 WebView 中打开网站,但不会填写任何内容。至于使用 getElementById,我检查了 Facebook 的电子邮件和密码字段,它们的 ID 分别是 email 和 pass。

    webView = (WebView) findViewById(R.id.webView1);
    webView.loadUrl("https://www.facebook.com");
    WebSettings webSettings = webView.getSettings();
    webSettings.setJavaScriptEnabled(true);
    webSettings.setDomStorageEnabled(true);
    webView.setWebViewClient(new WebViewClient() {
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);
            return true;
        }


        public void onPageFinished(WebView view, String url) {
            String user = "udb";
            String pwd = "abcdefg";
            view.loadUrl("javascript:document.getElementById('email').value = '" + user + "';document.getElementById('pass').value='" + pwd + "';");
            System.out.println("AUTOFILL");
        }
    });

而且它给了我这个错误

I/chromium: [信息:控制台(1)] "未捕获的类型错误: 无法设置 null 的 'value' 属性", 来源: (1)

不过我对 JavaScript 知道的不多。

答案#1

嗯,我仍然不能让 Facebook 工作,但我已经让 Google 登录和其他一些网站的注册/登录工作了。所以基本上,你需要检查网站的元素(通过在桌面上使用谷歌浏览器),然后获取元素 ID;

这是填写表单/字段的代码:

    webView.loadUrl("javascript:(function() { document.getElementById('last_name').value = '" + lName + "'; ;})()");

这是点击按钮的代码:

    webView.loadUrl("javascript:(function() { var z = document.getElementById('signInButton').click(); })()");

哦,我是用手机来做这个的,因为用模拟器的时候什么都没发生。

编辑:我实际上通过检查 mobile.facebook.com 网站让 Facebook 有点工作,但没有电子邮件的 ID,只有密码、登录按钮和其他一些元素的 ID。

答案#2

在 WebView 中加载网页:

在你的活动或片段中,在 WebView 中加载包含登录表单的网页。如果页面需要,请确保启用 JavaScript:

WebView webView = findViewById(R.id.webview);
webView.getSettings().setJavaScriptEnabled(true);
webView.loadUrl("https://example.com/login");

要使用用户名和密码自动填写表单,你可以将 JavaScript 注入到 WebView 中。你需要知道网页 HTML 源代码中输入字段的ID 或名称。例如,如果输入字段的 ID 分别是 username_input 和 password_input,你可以使用以下代码:

String username = "your_username";
String password = "your_password";

String js = "javascript:(function() { " +
        "document.getElementById('username_input').value = '" + username + "';" +
        "document.getElementById('password_input').value = '" + password + "';" +
        "})()";

webView.setWebViewClient(new WebViewClient() {
    @Override
    public void onPageFinished(WebView view, String url) {
        super.onPageFinished(view, url);
        view.loadUrl(js);
    }
});