美文网首页不正经IT从业者 ios实用开发技巧
ios_webview_iframe框架页面文字获取

ios_webview_iframe框架页面文字获取

作者: Mark_大东 | 来源:发表于2017-10-11 11:25 被阅读14次

    最近在做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,如果你有好好方法欢迎分享。

    相关文章

      网友评论

      本文标题:ios_webview_iframe框架页面文字获取

      本文链接:https://www.haomeiwen.com/subject/pnaiyxtx.html