一种有效的方法是在UIWebView
.
该策略非常简单,它涉及使用控制网页的stringByEvaluatingJavaScriptFromString
方法UIWebView
。
假设您已经拥有用户登录信息,您可以使用 javascript 脚本输入它们。
例如,假设它webView
是UIWebView
实例并且username
是用户名输入字段:
NSString * usernameScript = @"document.getElementById('username').value='Gabriele';";
[self.webView stringByEvaluatingJavaScriptFromString:usernameScript];
上面的代码将插入Gabriele
用户名字段。
沿着同一条路径,您可以轻松地继续并通过 javascript 注入自动与网页交互。
登录后,您可以监视当前 URL,直到重定向将您带到所需的位置。为了做到这一点,您必须实现 的webViewDidFinishLoad:
方法UIWebViewDelegate
,每次 Web 视图加载页面时都会调用该方法
- (void)webViewDidFinishLoad:(UIWebView *)webView {
NSURL * currentURL = webView.request.mainDocumentURL;
if ([currentURL.absoluteString isEqual:desideredURLAddress]) {
[self performScraping];
}
}
此时您可以执行实际的抓取。假设您要获取div
id 为 的标签的内容foo
。这就像做一样简单
- (void)performScraping {
NSString * fooContentScript = @"document.getElementById('foo').innerHTML;";
NSString * fooContent = [self.webView stringByEvaluatingJavaScriptFromString:usernameScript];
}
这将存储变量内部的innerHTML
内容。div#foo
fooContent
底线是,在UIWebView
您可以控制和抓取任何网页的内部注入 javascript。
为了获得额外的乐趣,您可以在屏幕外执行所有这些操作。为此,分配一个新UIWindow
的并将其添加UIWevView
为它的子视图。如果你从UIWindow
不让可见,上面描述的一切都会发生在屏幕外。
请注意,这种方法非常有效,但它可能会消耗资源,因为您正在加载每个网页的全部内容。然而,这通常是一个必要的折衷方案,因为基于 XML 解析器的其他方法可能不够充分,因为 HTML 页面通常格式不正确,并且大多数 XML 解析器对它们的解析过于严格。