从Android中的WebView获取图像src

时间:2019-08-29 17:54:19

标签: javascript java android

我正在尝试获取在Web视图中找到的验证码图像的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();
                }

1 个答案:

答案 0 :(得分:0)

这是因为尝试查询DOM时页面尚未加载。确定页面已加载时,需要查询DOM。

我们需要为网络视图设置WebViewClient,然后监听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)