藉著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就在其中。
張貼留言