我有一个打开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();
}
}
我错过了什么。?
答案 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值不是动态的)。