iOS的UIWebView获取dom节点


webView载入 http://baidu.com 我要把那个百度Logo的<p>拿出来,在Chrome的console里直接运行

document.getElementById('lg')

没问题,可以拿出来
JS
但是我在代码里,运行这段代码,空的,什么都没有。

- (void)webViewDidFinishLoad:(UIWebView *)webView
{
    NSString *js = @"document.getElementById('lg')";
    NSString *pageSource = [webView stringByEvaluatingJavaScriptFromString:js];
    NSLog(@"pagesource:%@", pageSource);
}

NSLog打印出来什么都没有。如果我用 @"document.body.innerHTML" 是可以把整个body弄出来的

补充:移动版的id不一样

手机webview拿出的是移动版,logo的id是 "logo" 不是 "lg" 但是即使换成 "logo" 还是一样不行

<div id="index-card" class="card"><div id="userinfo-wrap"><a id="login" href="http://wappass.baidu.com/passport/?login&tpl=wimn&ssid=0&from=844b&bd_page_type=1&pu=sz@1320_2001&uid=63F6D4DE11637DEB1C14B1B9B64017BE&tn=&regtype=1&u=http://m.baidu.com">登录</a></div><div id="logo"><img src="http://m.baidu.com/static/index/logo_index2.png" width="168" alt="百度一下,你就知道"></div>

ios webview

加贺黑丝骑脸爽 10 years, 11 months ago

你通过 getElementById 拿到的只是这个节点的对象,要通过 innerHTML 得到代码

- (void)webViewDidFinishLoad:(UIWebView *)webView
{
    NSString *js = @"document.getElementById('lg').innerHTML";
    NSString *pageSource = [webView stringByEvaluatingJavaScriptFromString:js];
    NSLog(@"pagesource:%@", pageSource);
}
搬砖DNG answered 10 years, 11 months ago

Your Answer