我试图从我学校的网站上自动填写表格。 我已经看到了一些与javascrip有关的方法。
这是我的代码:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.navegador_siiau_layout);
navegador_siiau = (WebView) findViewById(R.id.wv_navegador_siiau);
navegador_siiau.getSettings().setJavaScriptEnabled(true);
navegador_siiau.loadUrl("http://siiauescolar.siiau.udg.mx/wus/gupprincipal.inicio");
navegador_siiau.setWebViewClient(new WebViewClient() {
public void onPageFinished(WebView view, String url) {
String user="207512134";
String pwd="FENMAA";
view.loadUrl("javascript:document.getElementsByName('p_codigo_c').value = '"+user+"';document.getElementsByName('p_clave_c').value='"+pwd+"';");
}
});
}
结果是一个空白页面,其中包含我尝试放入表格中的最后一个字符串... 如何正确填写和提交表格?
答案 0 :(得分:2)
这是未经测试的,但我认为这里有两件事:
在致电setWebViewClient
之前,您应该使用WebViewClient
实施方式致电loadUrl
。但是,loadUrl
是异步的,所以它可能没什么区别,但我认为这值得一试。
您没有在onPageFinshed中调用super.onPageFinished(view, url);
。你应该添加这个电话。
编辑2:
我终于看了你正在使用的实际页面。问题是页面在不同的框架中加载内容,因此您实际上必须在不同的文档上进行getElementsByName
调用。您想要的两个输入所在的框架在您的页面中具有名称mainFrame
。所以,您应该像这样编写javascript并将其加载到WebView
中,如上所述:
window.frames["mainFrame"].document.
getElementsByName('p_codigo_c')[0].value = "user";
window.frames["mainFrame"].document.
getElementsByName('p_clave_c')[0].value = "password";
答案 1 :(得分:0)
您只需要启用内容
myview.getSettings().setDomStorageEnabled(true);
然后使用getelementby id,如
javascript:var x = document.getElementById('myfield').value = 'aaa';
并在
中执行此操作 onPageFinishedLoading(){}
从链接Android WebView always returns null for javascript getElementById on loadUrl
获取此信息答案 2 :(得分:0)
这适用于我的API版本大于18
mWebView = findViewById(R.id.web_view);
String url = "https://duckduckgo.com";
mWebView.loadUrl(url);
mWebView.getSettings().setJavaScriptEnabled(true);
final String js = "javascript:document.getElementById('search_form_input_homepage').value='android';" +
"document.getElementById('search_button_homepage').click()";
mWebView.setWebViewClient(new WebViewClient(){
public void onPageFinished(WebView view, String url){
if(Build.VERSION.SDK_INT >= 19){
view.evaluateJavascript(js, new ValueCallback<String>() {
@Override
public void onReceiveValue(String s) {
}
});
}
}
});
这里重要的是view.evaluateJavascript
答案 3 :(得分:0)
对我来说,需要在回调以下项时一一填写多个条目 每个“ webView.evaluateJavascript” 注意:API版本> 18
请参见下面的代码片段
ArrayList<String> arr = new ArrayList<String>();
arr.add("document.getElementsByName(\"tag_name\")[0].value = \"your_value\";");
.
.
.
call setValue(arr, 0)
private void setValue(final ArrayList<String> arr, final int i) {
if (i < arr.size()) {
webView.evaluateJavascript(arr.get(i), new ValueCallback<String>() {
@Override
public void onReceiveValue(String value) {
int j = i + 1;
setValue(arr, j);
}
});
}else{
webView.evaluateJavascript("document.getElementById(\"your_form_id\").submit();", new ValueCallback<String>() {
@Override
public void onReceiveValue(String value) {
Toast.makeText(MainActivity.this, "Submitted: "+value, Toast.LENGTH_SHORT).show();
}
});
}
}