javascript - 从android中的webview获取图像src
问题描述
我正在尝试获取在 webview 中找到的验证码图像的 src,但是当我输入以下代码时,输出显示:
Uncaught TypeError: Cannot read property 'src' of null
还有一个问题,如果我得到图像 src,我如何将图像放在图像视图中?
任何帮助将不胜感激
到目前为止,这是我的代码:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
wv = (WebView) findViewById(R.id.wv) ;
mImgCaptcha = (ImageView) findViewById(R.id.imgCaptcha);
done = (Button) findViewById(R.id.done);
contentView = (TextView) findViewById(R.id.textView);
username = (EditText) findViewById(R.id.editText);
password = (EditText) findViewById(R.id.password);
code = (EditText) findViewById(R.id.code);
WebSettings webSettings = wv.getSettings();
webSettings.setJavaScriptEnabled(true);
wv.getSettings().setDomStorageEnabled(true);
wv.loadUrl("https://noor.moe.gov.sa/NOOR/Login.aspx");
wv.loadUrl("javascript:var a = document.getElementById('imgCaptcha').src;");
System.out.println(wv.getUrl());
done.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
wv.loadUrl("javascript:var x = document.getElementById('tbPublic').value = '" + username.getText().toString() + "';");
wv.loadUrl("javascript:var x = document.getElementById('tbPrivate').value = '" + password.getText().toString() + "';");
wv.loadUrl("javascript:var x = document.getElementById('tbCaptcha').value = '" + code.getText().toString() + "';");
try {
Thread.sleep(2000);
wv.loadUrl("javascript:(function(){" +
"l=document.getElementById('btnLogin');" +
"e=document.createEvent('HTMLEvents');" +
"e.initEvent('click',true,true);" +
" l.dispatchEvent(e);" +
"})()");
} catch (InterruptedException e) {
e.printStackTrace();
}
解决方案
这是因为当您尝试查询 DOM 时页面尚未加载。当您可以确定页面已加载时,您需要查询 DOM。
我们需要WebViewClient
为 webview 设置,然后监听onPageFinished
事件。代码可能如下所示:
webView.setWebViewClient(new WebViewClient(){
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
// you can now query the DOM.
webView.loadUrl("javascript:var a = document.getElementById('imgCaptcha').src;");
}
});
推荐阅读
- java - 如何在android中使用没有LiveData的房间和数据库?
- amazon-dynamodb - dynamodb 表索引设计 全局索引或本地
- ruby-on-rails - 在 Rails 中递归渲染相同的部分会使应用程序崩溃
- php - Codeigniter foreach() 限制
- .net-core - 如何关闭 Application Insights Dependency Tracker?
- ios - bcsymbolmap 不是有效的标识符?
- javascript - 如何在 FeatherJS 中验证日期格式
- python - 使用pyqt5 mvc进行窗口切换
- sql-server - 使用 SSAS 多维多维数据集的 Power BI Slow
- swift - 由于“内部”保护级别,“值”不可访问