2016-07-27 219 views
1

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

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

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

你要做的,就是做一个POST请求到这个网页:

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

用POST数据: lccp_cap_value, lccp_capinp_value, lccp_pnrno1

的pnrno1是价值你输入那里。我的上限值和capinp值是24357.重新检查一下,它们对你来说也是一样的。不确定它们是动态的还是静态的。

除此之外,我认为不可能在不挂钩某种外部JavaScript文件的情况下实现此目的。但是POST解决方案应该可行(如果cap和capinp值不是动态的)。

+0

你是如何检查lccp_cap_value和lccp_capinp_value的。此外,因为我将发送来自具有不同PNR的应用程序的请求,它将使用相同的值。 – Akshat

+0

我通过检查给定网页的HTML源代码来检查它。第618行和第619行是cap和capinp值。是的,您可以尝试将cap和capinp值保持为静态(24357),然后更改pnrno1值。这对我有效。 – Janno

+0

http://i.imgur.com/wY2lzyV.png – Janno