自动填充webview表单

时间:2016-07-27 06:19:54

标签: javascript java android webview

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

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();
    }
}

我错过了什么。?

1 个答案:

答案 0 :(得分: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是您在那里输入的值。我的上限值和上限值是24357.重新检查它们对你来说也是一样的。不确定它们是动态的还是静态的。

除此之外,我认为如果不挂钩某种外部JavaScript文件,就无法实现这一目标。但是POST解决方案应该有效(如果cap和capinp值不是动态的)。