android webview 抓网页
16lz
2021-12-04
Android: 在WebView中获取网页源码
1. 使能javascript:
1 | webView.getSettings().setJavaScriptEnabled(true); |
2. 编写本地接口
1 2 3 4 5 | finalclassInJavaScriptLocalObj { publicvoidshowSource(String html) { Log.d("HTML", html); } } |
3. 向网页暴露本地接口
1 | webView.addJavascriptInterface(newInJavaScriptLocalObj(),"local_obj"); |
4. 编写自己的WebViewClient,并在onPageFinished中提取网页源码。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | finalclassMyWebViewClientextendsWebViewClient{ publicbooleanshouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); returntrue; } publicvoidonPageStarted(WebView view, String url, Bitmap favicon) { Log.d("WebView","onPageStarted"); super.onPageStarted(view, url, favicon); } publicvoidonPageFinished(WebView view, String url) { Log.d("WebView","onPageFinished "); view.loadUrl("javascript:window.local_obj.showSource('<head>'+"+ "document.getElementsByTagName('html')[0].innerHTML+'</head>');"); super.onPageFinished(view, url); } } |
组合在一起的代码为:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | packagecom.hi.briancol.htmlsource; importandroid.app.Activity; importandroid.graphics.Bitmap; importandroid.os.Bundle; importandroid.util.Log; importandroid.webkit.WebView; importandroid.webkit.WebViewClient; publicclassHtmlSourceextendsActivity { privateWebView webView; /** Called when the activity is first created. */ @Override publicvoidonCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); webView = (WebView)findViewById(R.id.webview); webView.getSettings().setJavaScriptEnabled(true); webView.addJavascriptInterface(newInJavaScriptLocalObj(),"local_obj"); webView.setWebViewClient(newMyWebViewClient()); webView.loadUrl(" http://www.cnblogs.com/hibraincol/"); } finalclassMyWebViewClientextendsWebViewClient{ publicbooleanshouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); returntrue; } publicvoidonPageStarted(WebView view, String url, Bitmap favicon) { Log.d("WebView","onPageStarted"); super.onPageStarted(view, url, favicon); } publicvoidonPageFinished(WebView view, String url) { Log.d("WebView","onPageFinished "); view.loadUrl("javascript:window.local_obj.showSource('<head>'+"+ "document.getElementsByTagName('html')[0].innerHTML+'</head>');"); super.onPageFinished(view, url); } } finalclassInJavaScriptLocalObj { publicvoidshowSource(String html) { Log.d("HTML", html); } } } |
关键之处在于:
view.loadUrl("javascript:window.local_obj.showSource('<head>'+document.getElementsByTagName('html')[0].innerHTML+'</head>');");
运行,可以看到在showSource(String html)中打印了网页源码。
更多相关文章
- Android获得当前系统时间、星期几、周几
- Android搜索框之PopupWindow+ListView实现
- 分享20个Android游戏源码,希望大家喜欢哈!
- android camera 源码分析
- Android的pagerAdapter源码,在线查看网址。
- Android(安卓)IntentService 深入分析
- Android存储系统之源码篇
- Android显示图片自适应(控件+网页)
- Android英语单词记忆程序源码