[ios]当试图获得的 HTML 内容被阻止

发布时间: 2017/3/28 23:42:32
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我试图 HTML 内容从一个网站,但它封锁了 JavaScript。

这里是执行︰

- (void)viewDidLoad
{
  NSURL *htmlUrl = [NSURL URLWithString:@"https://color.adobe.com/explore/most-popular/?time=week"];
  NSStringEncoding htmlEncoding = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingUTF8);

  NSString *htmlString = [NSString stringWithContentsOfURL:htmlUrl encoding:htmlEncoding error:nil];

  NSLog(@"%@",htmlString);

  NSData *htmlData = [htmlString dataUsingEncoding:NSUTF8StringEncoding];
  TFHpple *htmlHpple = [TFHpple hppleWithHTMLData:htmlData];
}

NSLog 输出的部分︰

    <h1>JavaScript Disabled</h1>
<p>Adobe Color CC requires JavaScript in order to load properly. Please enable JavaScript in your browser and reload the page.</p>
</li>
<li>
  <h1>JavaScript est désactivé</h1>
  <p>Pour pouvoir se charger correctement, Adobe Color CC requiert JavaScript. Veuillez activer JavaScript dans votre navigateur et recharger la page.</p>
  JavaScript ist erforderlich, damit Adobe Color CC ordnungsgemäß geladen wird. Aktivieren Sie JavaScript im Browser und laden Sie die Seite neu.
  </p>
</li>
<li>
  <h1>JavaScript が無効です</h1>
  <p>Adobe Color CC で正しく読み込みを行うには、JavaScript が必要です。ご使用のブラウザーで JavaScript を有効にして、ページを再読み込みしてください。</p>
</li>
<li>
  <h1>JavaScript desactivado</h1>
  <p>Para que Adobe Color CC pueda cargarse correctamente, se requiere JavaScript. Active JavaScript en el navegador y vuelva a cargar la página.</p>
</li>

这是不是我想要什么。

实际上,当你打开的 url,你可以看到很多的颜色。这就是我想要分析和提取。

但不是

<h1>JavaScript Disabled</h1> <p>Adobe Color CC requires JavaScript in order to load properly. Please enable JavaScript in your browser and reload the page.</p>

解决方法 1:

以及分析了从 url 找到您在提供的是,这只使用简单的 http 请求的 web 页的一部分工况的载荷和像颜色使用 ajax 请求的所有其他部分。所以,当你将要求使用简单的代码
NSString *htmlString = [NSString stringWithContentsOfURL:htmlUrl encoding:htmlEncoding error:nil];

然后,它不会给你整束的 html 代码在 web 浏览器中所示,但提供只有一小部分。如果你想整个 html 代码,然后加载 url 使用 UIWebView 然后当 web 视图将完成加载然后找到使用代码的 html 字符串

NSString *htmlString = [webView stringByEvaluatingJavaScriptFromString:@"document.documentElement.outerHTML"];

与在 web 浏览器中看到,现在你可以找到任何你想要它会给你整个 html 代码。

重要说明︰ 要查找 web 视图时完成 ajax 加载,你将不得不注入一些 java 脚本在您 web 视图当 ajax 请求完成加载时调用你的代表。或只是为了验证我的代码,你可以简单地使用

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(20 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
       NSString *htmlString = [webView stringByEvaluatingJavaScriptFromString:@"document.documentElement.outerHTML"];
    });

要当 ajax 请求将大约完成 20 秒加载时调用您的代码。内部 web 视图委托方法

- (void)webViewDidFinishLoad:(UIWebView *)webView

希望这是你想要什么,和一件事上的 javascript 代码是在默认情况下包含在您不需要注入由您自己的 web 视图。

官方微信
官方QQ群
31647020