藉著setWebViewClient設定,當WebView載入網頁後onPageFinished,巧妙地插入JavaScript碼。利用JavaScript的document.getElementsByTagName傳出網頁的HTML原始碼,然後呼叫我們經由addJavascriptInterface掛上的showHTML函數,HTML碼就手到擒來了!
mWebView = (WebView) findViewById(R.id.webview); WebSettings ws = mWebView.getSettings(); ws.setSavePassword(false); ws.setSaveFormData(false); ws.setJavaScriptEnabled(true); ws.setSupportZoom(false); mWebView.setWebChromeClient(new MyWebChromeClient()); mWebView.addJavascriptInterface(new DemoJavaScriptInterface(),"HTMLOUT"); mWebView.setWebViewClient(new WebViewClient(){ @Override public void onPageFinished(WebView view, String url) { mWebView.loadUrl("javascript:window.HTMLOUT.showHTML('<head>'+ document.getElementsByTagName('html')[0].innerHTML+'</head>');"); } });
底下就是用AlertDialog顯示網頁上的html碼。
final class DemoJavaScriptInterface { public void showHTML(String html) { new AlertDialog.Builder(AppCt).setTitle("HTML codes") .setMessage(html) .setPositiveButton(android.R.string.ok, null) .setCancelable(false).create().show(); } }
下面用來攔截Javascrip Alert 換成Android的。
final class MyWebChromeClient extends WebChromeClient { @Override public boolean onJsAlert(WebView vw,String url,String msg,JsResult ret){ new AlertDialog.Builder(AppCt).setTitle("Alert").setMessage(msg) .setPositiveButton(android.R.string.ok, null) .setCancelable(false).create().show(); ret.confirm(); return true; } }
2 則留言:
請問小弟要是抓取網頁
body裡的內容
該如何做?
拜託您指點一下
你需要剖析html字串,body就在其中。
張貼留言