不正经IT从业者 ios实用开发技巧

ios_webview_iframe框架页面文字获取

2017-10-11  本文已影响14人  Mark_大东

最近在做VPN项目,为了给用户提供最优秀的网络节点,需要客户端对各个节点进行ping测试耗时,同时对网络延时过长的用户上报IP和DNS地址上报给服务器。
但是我们获取IP和DNS地址从网易的页面获取,网易的页面用了iframe,不是一个简单的页面,对读取页面文字有影响。现在页面的数据已经取出来了。以下仅做积累。

网易页面展示

image image

获取页面文字获取方法解析

因为这个webview里面记载了一个iframe框架,所有先通过webview代理拿到iframe里面URL,然后再用一个web打开iframe里面的URL,通过tag值区分两个不同的webview,最后在webview记载完毕之后打印我们需要的页面文字。

主要代码如下
// *加载第一个页面
first = [[UIWebView alloc] initWithFrame:self.view.frame];
first.delegate = self;
first.tag = 100;
NSMutableURLRequest *requestceshi =[NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http://nstool.netease.com/"]];
[first loadRequest:requestceshi];
// *以下是webview的两个代理方法,通过tag值来区分,同时获取我们需要的页面地址
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
    if (webView.tag == 100) {
        requestString  = [[request URL] absoluteString];
        NSLog(@"打印所有的请求 == %@",requestString);
        if (![requestString isEqualToString:@"http://nstool.netease.com/"]) {
            NSLog(@"requestString == %@",requestString);
            second = [[UIWebView alloc] initWithFrame:CGRectMake(0, 20, self.view.frame.size.width, self.view.frame.size.height - 20)];
            second.delegate = self;
            second.tag = 1000;
            [second loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:requestString]]];
        }
    }
    return YES;
}

- (void)webViewDidFinishLoad:(UIWebView *)webView{
    if (webView.tag == 1000) {
        if (![requestString isEqualToString:@"http://nstool.netease.com/"]) {
            NSString *doc = @"document.documentElement.innerHTML";
            NSString *doc2 = @"document.body.innerText";
            NSString *doc3 = @"document.documentElement.textContent";
            NSString *doc4 = @"document.body.innerHTML";
            NSString *html1 = [webView stringByEvaluatingJavaScriptFromString:doc];
            NSString *html2 = [webView stringByEvaluatingJavaScriptFromString:doc2];
            NSString *html3 = [webView stringByEvaluatingJavaScriptFromString:doc3];
            NSString *html4 = [webView stringByEvaluatingJavaScriptFromString:doc4];
            NSLog(@"lHtml1  == %@",html1);
            NSLog(@"lHtml2  == %@",html2);
            NSLog(@"lHtml3  == %@",html3);
            NSLog(@"lHtml3  == %lu",(unsigned long)html3.length);
            NSLog(@"lHtml4  == %@",html4);
            NSArray *array = [html4 componentsSeparatedByString:@"<br>"];
            NSLog(@"打印lHtml4数组  == %@",array[2]);
            NSString *string  = array[2];
            NSString *ceshi = [string substringWithRange:NSMakeRange(10, 16)];
            NSLog(@"打印lHtml4数组截取  == %@",ceshi);
        }
    }
}
小结

现在是可以获取到页面的文字,感觉获取的方法还是有点略lou,如果你有好好方法欢迎分享。

上一篇下一篇

猜你喜欢

热点阅读