iOS开发:如何提取HTML页面中特定frame标签的src属性值
最简实现方案:直接用JS定位frame并提取src
首先你之前拿到空的innerHTML,大概率是WebView还没完成页面加载就调用了stringByEvaluatingJavaScriptFromString:,或者没必要去拿整个HTML字符串——我们换个更直接的思路,直接用JS定位那个唯一的frame标签,一步拿到src属性。
步骤1:在WebView加载完成后执行JS
不管你用的是UIWebView还是WKWebView,都要等页面加载完成再操作,不然会拿不到元素:
如果你用的是UIWebView:
- (void)webViewDidFinishLoad:(UIWebView *)webView { // 直接定位唯一的frame并提取src NSString *frameSrc = [webView stringByEvaluatingJavaScriptFromString:@"document.querySelector('frame').src"]; NSLog(@"提取到的src内容:%@", frameSrc); }
如果你用的是WKWebView:
- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation { [webView evaluateJavaScript:@"document.querySelector('frame').src" completionHandler:^(id _Nullable result, NSError * _Nullable error) { if (!error && result) { NSString *frameSrc = result; NSLog(@"提取到的src内容:%@", frameSrc); } else { NSLog(@"提取失败:%@", error.localizedDescription); } }]; }
为什么这是最简方法?
document.querySelector('frame')会直接找到页面里的第一个(也就是你说的唯一的)frame元素,不用去处理冗长的HTML字符串,避免了正则解析或者字符串切割的麻烦。- 直接访问
.src属性就能拿到你要的文本,一步到位,效率比先拿整个HTML再处理高得多。
额外小提醒
如果遇到JS执行报错,先检查这两点:
- 页面里确实存在唯一的
<frame>标签; - WKWebView的配置里
javaScriptEnabled已经设为YES(默认是开启的,但保险起见确认下)。
内容的提问来源于stack exchange,提问作者MichiZH
相关产品推荐
相关产品推荐

