使用Jsoup从webview android的网页中删除DIV

时间:2013-08-02 03:29:29

标签: android-webview jsoup

我想在webview android上部分查看网页,并从网页中删除一些div元素。我有这样的网页

<!DOCTYPE html>
<body>

<div id="a"><p>Remove aa</p></div>
<div id="b"><p>bb</p></div>

</body></html>

现在我想从网页中删除ID为“a”的div。

我尝试用Jsoup编写代码,但我还不够好。请参阅我的完整代码:

import java.io.IOException;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;

import android.os.Bundle;
import android.app.Activity;
import android.graphics.Bitmap;
import android.webkit.WebView;
import android.webkit.WebViewClient;


public class CustomWebsite extends Activity {

    private WebView webView;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_custom_website); 

         Document doc;

         String htmlcode = "";

         try {
             doc = Jsoup.connect("http://skyasim.info/ab.html").get();
             doc.head().getElementsByTag("DIV#a").remove();

              htmlcode = doc.html();


         } catch (IOException e) {
             // TODO Auto-generated catch block
             e.printStackTrace();
         }

        webView = (WebView) findViewById(R.id.webView_test);
        webView.setWebViewClient(new myWebClient());
        webView.getSettings().setJavaScriptEnabled(true); 
        webView.loadUrl("htmlcode");


        }

          public class myWebClient extends WebViewClient
            {
                @Override
                public void onPageStarted(WebView view, String url, Bitmap favicon) {
                    // TODO Auto-generated method stub
                    super.onPageStarted(view, url, favicon);
                }

                @Override
                public boolean shouldOverrideUrlLoading(WebView view, String url) {
                    // TODO Auto-generated method stub

                    view.loadUrl(url);
                    return true;

                }
            }


}

3 个答案:

答案 0 :(得分:4)

你可以不使用你知道的Jsoup来做到这一点。只需使用普通的旧JavaScript。以下代码将说明如何从HTML页面中删除元素并显示其余元素。

final WebView mWebView = (WebView) findViewById(R.id.mWebViewId);
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.setWebViewClient(new WebViewClient() {
 @Override
public void onPageFinished(WebView view, String url)
{
mWebView.loadUrl("javascript:(function() { " +
    "document.getElementById('a')[0].style.display='none'; " +
    "})()");
}
});
mWebView.loadUrl(youUrl);

答案 1 :(得分:3)

通过选择它然后使用remove - 方法从文档中删除它。

doc.select("div#a").remove();
System.out.println(doc);

示例:

Document doc = Jsoup.parse(html);
System.out.println("Before removal of 'div id=\"a\"' = ");
System.out.println("-------------------------");
System.out.println(doc);

doc.select("div#a").remove();
System.out.println("\n\nAfter removal of 'div id=\"a\"' = ");
System.out.println("-------------------------");
System.out.println(doc);

将导致

Before removal of 'div id="a"' = 
-------------------------
<!DOCTYPE html>
<html>
 <head></head>
 <body> 
  <div id="a">
   <p>Remove aa</p>
  </div> 
  <div id="b">
   <p>bb</p>
  </div> 
 </body>
</html>


After removal of 'div id="a"' = 
-------------------------
<!DOCTYPE html>
<html>
 <head></head>
 <body>  
  <div id="b">
   <p>bb</p>
  </div> 
 </body>
</html>

答案 2 :(得分:2)

我之前尝试过使用Jsoup做类似的事情,但我的应用总是崩溃。如果您只使用Javascript(这有助于缩小您的应用尺寸),这就是我为我的应用做的:

webview3.setWebViewClient(new WebViewClient() {

        @Override
        public void onPageFinished(WebView view, String url) {
            view.loadUrl("javascript:var con = document.getElementById('a'); " +
                    "con.style.display = 'none'; ");

            }


    });

希望我的Javascript是正确的。这里的想法是在页面加载完成后使用Javascript隐藏div。