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