首页 > 解决方案 > 从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();
                }

标签: javascriptjavaandroid

解决方案


这是因为当您尝试查询 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;");
    }
});

进一步阅读:https://developer.android.com/reference/android/webkit/WebViewClient#onPageFinished(android.webkit.WebView,%2520java.lang.String)


推荐阅读