项目地址在文章最后
在做一个项目,需要对网站做解析,就是把网页的不需要的部分去除。比如广告啊,导航栏,登陆栏之类的。一般的做法就是
NSURL *url = [NSURL URLWithString:_link];
[_webView loadRequest:[NSURLRequest requestWithURL:url]];
然后,在- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation这个函数内用js把想要去掉的节点删掉。那么问题来了,webview加载网页时是把已经加载好的内容先显示出来,再继续加载,直到所有的内容都加载好了,- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation这个函数才会调用。所以你会看到一个完整的网页,再一闪,才是你想要的网页。当然你也可以先隐藏网页,等完成后再显示。那么问题又来了,如果这个网页要等很久才完成呢?刚好我的网页竟然要等5分钟才能完成,实在受不了。后来我想到先把html给弄来,对html进行处理后再加载,发现这样只要3,4秒。我的做法是
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
_htmlString = [NSString stringWithContentsOfURL:_URLs[_index] encoding:NSUTF8StringEncoding error:nil];
if(_htmlString == nil || _htmlString.length == 0){
NSLog(@"load failed!");
}else{
_htmlString = [self filterHtmlString:_htmlString];
[_webView loadHTMLString:_htmlString baseURL:_URLs[_index]];
}
});
[_webView loadHTMLString:_htmlString baseURL:[NSURL URLWithString:_link]];这句话的baseURL不能为空,不然网页就没有背景啊,颜色那些资源。
我们对这个网站来处理一下
http://elderscrollsonline.wiki.fextralife.com
先去掉登录注册那部分,通过元素检查,