我正在向UIWebView
我的应用程序添加一个应该加载受密码保护的网页的应用程序。然后它应该自动从该页面中选择一个链接并导航到该页面。该网站不断更改其链接,因此无法选择目标页面的 URL。我需要先登录,然后从主页中选择一个链接。
登录后如何编写代码来搜索我的主页并导航到所需的链接?
我正在向UIWebView
我的应用程序添加一个应该加载受密码保护的网页的应用程序。然后它应该自动从该页面中选择一个链接并导航到该页面。该网站不断更改其链接,因此无法选择目标页面的 URL。我需要先登录,然后从主页中选择一个链接。
登录后如何编写代码来搜索我的主页并导航到所需的链接?
您可以使用 Javascript 通过其 id 检索链接,然后加载它:
[yourWebView stringByEvaluatingJavaScriptFromString:@"document.getElementById('yourLinkID').click();"];
要查找链接的 id 是什么,请检查页面上的 html 标记以获取 id 属性的值。
我认为正则表达式会有所帮助。
//NSError will handle errors
NSError *error;
//Create URL for you page. http://example.com/index.php just an example
NSURL *pageURL = [NSURL URLWithString:@"http://example.com/index.php"];
//Retrive page code to parse it using regex
NSString *pageHtml = [NSString stringWithContentsOfURL:pageURL
encoding:NSUTF8StringEncoding
error:&error];
if (error)
{
NSLog(@"Error during retrieving page HTML: %@", error);
//Will terminate your app
abort();
//TODO: handle connection error here
}
error = nil;
//Creating regex to parsing page html
//Information about regex patters you can easily find.
NSRegularExpression *regex = [[NSRegularExpression alloc] initWithPattern:@"<a[^>]*href=\"([^\"]*)\"[^>]*>mylink</a>"
options:NSRegularExpressionCaseInsensitive
error:&error];
if (error)
{
NSLog(@"Error during creating regex: %@", error);
//Will terminate your app
abort();
//TODO: handle regex error here
}
//Retrieving first match of our regex to extract first group
NSTextCheckingResult *match = [regex firstMatchInString:pageHtml
options:0
range:NSMakeRange(0, [pageHtml length])];
NSString *pageUrl = [pageHtml substringWithRange:[match rangeAtIndex:1]];
NSLog(@"Page URL = %@", pageUrl);
[webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:pageUrl]]];
如果您UIWebView
已经下载了带有 HTML 的页面,您可以替换
NSURL *pageURL = [NSURL URLWithString:@"http://example.com/index.php"];
NSString *pageHtml = [NSString stringWithContentsOfURL:pageURL encoding:NSUTF8StringEncoding error:&error];
有了这个:
NSString *pageHtml = [webview stringByEvaluatingJavaScriptFromString:@"document.body.innerHTML"];