UIWebView 如何用于自动抓取需要身份验证的页面?

How can UIWebView be used to automate scraping a page that requires auth?

我想用 swift 构建一个 iPhone/iPad iOS 应用程序来检查特定的 URL,获取并解析 HTML 页面,但是不暴露 UIWebView 的 Web 界面视图。如果 HTML 视图仅在第一次对用户进行身份验证时显示,此后每次都以编程方式直接访问该页面,我将非常高兴。我认为一个示例应用程序是 Hotmail 和 Outlook 的 MailBuzzr。

我需要某种网络抓取工具,但在某些情况下,例如http://login.live.com 进入非常麻烦,即非常复杂的输入表单、两步验证等。我刚刚测试了从 UIWebView 访问我的真实账户,即使需要两步验证,它也能很好地工作。但是,我想以编程方式到达那里,而不会将视图暴露给用户或以任何可能的方式伪装它。

有没有办法使用 UIWebView 来做到这一点?备选方案?

我的代码很简单:

@IBOutlet var Webview: UIWebView!
let url = NSURL(string: "https://account.live.com/")
let request = NSURLRequest(URL: url!)
Webview.loadRequest(request)

PS:我尝试使用 Mozilla 的 Web Developer 插件检查实时登录页面,但无法理解参数(NAP、ANON、t)及其计算方式。我认为可以做到,但也许有更简单的方法使用 UIWebView。

我认为您必须做的一件事是注入一些 JavaScript 来填充字段并触发登录过程。

您可以使用这样的方法(伪代码):

NSString *javaScript = @"var field = document.getElementsByTagName('#password')[0];
// Set it.
// Trigger the form submission.";
[webView stringByEvaluatingJavaScriptFromString:javaScript];

然后就可以通过获取内容(伪代码)来抓取页面了:

NSString *html = [webView stringByEvaluatingJavaScriptFromString:  @"document.body.innerHTML"];