【问题标题】:Autofill webview form自动填充 webview 表单
【发布时间】:2016-07-27 06:19:53
【问题描述】:

我有一个打开 this website 的 web 视图。我们可以看到它有一个输入字段。我想用我的数据自动填充该输入字段并自动单击提交按钮。这是我正在尝试自动填充但它不起作用。

public class WebViewActivity extends AppCompatActivity {
    private WebView webView;
    String url = "http://www.indianrail.gov.in/pnr_Enq.html", pnrNumber = "";
    ProgressBar pb;
    Toolbar toolbar;
    private Tracker mTracker;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_website);

        init();
    }

    private void init() {


        pnrNumber = getIntent().getStringExtra("pnrNumber");

        pb = (ProgressBar) findViewById(R.id.progressBar);
        pb.getProgressDrawable().setColorFilter(ContextCompat.getColor(this, R.color.White), PorterDuff.Mode.SRC_IN);

        webView = (WebView) findViewById(R.id.webView);

        this.webView.setWebViewClient(new WebViewClient());
        webView.getSettings().setJavaScriptEnabled(true);
        webView.getSettings().setSupportZoom(true);
        webView.getSettings().setBuiltInZoomControls(true);

        webView.getSettings().setSupportMultipleWindows(false);
        webView.getSettings().setDomStorageEnabled(true);

        webView.loadUrl(url);

        webView.setWebChromeClient(new WebChromeClient() {
            public void onProgressChanged(WebView view, int progress) {
                pb.setProgress(progress);
                if (progress == 100) {
                    pb.setProgress(0);
                }
            }
        });

        webView.setWebViewClient(new WebViewClient() {
            @Override
            public boolean shouldOverrideUrlLoading(WebView v, String url) {
                v.loadUrl(url);
                return true;
            }

            @Override
            public void onPageFinished(WebView v, String url) {
                v.loadUrl("javascript:document.forms[0].lccp_pnrno1.value = '"+pnrNumber+"';");
            }
        });
    }

    @Override
    public void onResume() {
        super.onResume();
        mTracker.setScreenName("WebView Fragment with " + url);
        mTracker.send(new HitBuilders.ScreenViewBuilder().build());

    }

    @Override
    public void onPause() {
        // TODO Auto-generated method stub
        super.onPause();
        webView.stopLoading();
    }

    @Override
    public void onStop() {
        super.onStop();
        // The rest of your onStop() code.
        webView.stopLoading();
    }
}

我错过了什么吗?

【问题讨论】:

    标签: javascript java android webview


    【解决方案1】:

    如果您想自动填充并立即提交,为什么不直接向该页面发送 POST 请求以获取您想要的内容?

    您所要做的就是向该页面发出 POST 请求:

    http://www.indianrail.gov.in/cgi_bin/inet_pnstat_cgi_8238.cgi

    使用 POST 数据: lccp_cap_value, lccp_capinp_value, lccp_pnrno1

    pnrno1 是您在此处输入的值。我的 cap 值和 capinp 值是 24357。重新检查它们对你来说是否相同。不确定它们是动态的还是静态的。

    除此之外,我认为如果不将某种外部 JavaScript 文件挂接到它,就不可能实现这一点。但是 POST 解决方案应该可以工作(如果 cap 和 capinp 值不是动态的)。

    【讨论】:

    • 你是如何检查 lccp_cap_value 和 lccp_capinp_value 的?另外,由于我将从具有不同 PNR 的应用程序发送请求,因此它是否可以使用相同的值。?
    • 我通过检查给定网页的 HTML 源来检查它。第 618 和 619 行是 cap 和 capinp 值。是的,您可以尝试将 cap 和 capinp 值保留为静态 (24357),然后更改 pnrno1 值。这对我有用。
    • 我无法得到相同的结果。 imgur.com/K4V5xdM我正在检查 PNR 4122187431
    • 抱歉添加了错误的图片。 imgur.com/a/h6mRm我无法得到结果。
    • 刚刚用 PHP cURL 自己测试过。您必须将引用者设置为请求。推荐人:indianrail.gov.in/pnr_Enq.html 如果设置了,它将允许您对其进行“远程”调用。这是 PHP 源代码的 pastebin 链接:pastebin.com/LYv7fJF6
    猜你喜欢
    • 2011-10-22
    • 2018-11-28
    • 2014-06-11
    • 1970-01-01
    • 2020-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-26
    相关资源
    最近更新 更多