Javascript 尝试获取HTML内容时被阻止

Javascript 尝试获取HTML内容时被阻止,javascript,html,ios,objective-c,Javascript,Html,Ios,Objective C,我试图从一个网站获取HTML内容,但它被JavaScript阻止 以下是实施方案: - (void)viewDidLoad { NSURL *htmlUrl = [NSURL URLWithString:@"https://color.adobe.com/explore/most-popular/?time=week"]; NSStringEncoding htmlEncoding = CFStringConvertEncodingToNSStringEncoding(kCFString

我试图从一个网站获取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>
JavaScript已禁用
AdobeColor CC需要JavaScript才能正确加载。请在浏览器中启用JavaScript并重新加载页面

  • JavaScript是最快的 Pour pouvoir se充电器校正,Adobe Color CC requiert JavaScript。Veuillez activer JavaScript dans votre导航器和充值器页面

    JavaScript是erforderlich,damit Adobe Color CC Ordnugsgemäßgeladen wird。Aktivieren是JavaScript im浏览器,我是Seite neu。

  • JavaScriptが無効です AdobeColor CCで正しく読み込みを行うには、JavaScriptが必要です。ご使用のブラウザーで JavaScriptを有効にして、ページを再読み込みしてください。

  • JavaScriptDeActivado Adobe Color CC pueda cargarse correctamente,se require JavaScript。在纳维加多尔和沃尔瓦的卡加拉·帕吉纳(cargar la página)的活动JavaScript

  • 那不是我想要的。

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

    但不是

    JavaScript已禁用
    
    AdobeColor CC需要JavaScript才能正确加载。请在浏览器中启用JavaScript并重新加载页面。

    如果要获取html数据,可以尝试如下操作:-

      TFHpple *htmlHpple = [TFHpple hppleWithHTMLData:htmlData];
    
    //在此之后,包括以下用于获取数据的代码行

        NSString *htmlXpathQueryString = @"//h1";
        NSArray *htmlNodes = [tutorialsParser searchWithXPathQuery:htmlXpathQueryString];
         for (TFHppleElement *element in htmlNodes) {
             NSLog(@"%@",[[element firstChild] content]);
         }
    

    有关更多详细信息,请参阅此

    ,正如我所分析的,从您提供的url中可以发现,这只使用简单的http请求加载网页的一部分,并使用ajax请求加载所有其他部分,如颜色。因此,当您使用simple
    NSString*htmlString=[NSString stringWithContentsOfURL:htmlUrl编码:htmlEncoding错误:nil]

    然后,它将不会提供web浏览器中显示的全部html代码,而只提供一小部分。如果需要完整的html代码,请使用
    UIWebView
    加载url,然后在web视图完成加载后,使用代码查找html字符串

    NSString*htmlString=[webView stringByEvaluatingJavaScriptFromString:@“document.documentElement.outerHTML”]

    它将为您提供在web浏览器中看到的全部html代码,现在您可以找到您想要的任何内容

    重要提示:要确定webView何时完成ajax加载,必须在webView中插入一些java脚本,以便在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包含在webView中,您不需要自己插入它。

    谢谢,我的意思是当您解析
    https://color.adobe.com/en/explore/most-popular/?time=week
    ,您需要获取HTML数据,对吗?问题是如何获取HTML。事实上,当您打印从url获得的字符串时,您将获得与我上面的帖子相同的字符串:(@HussainShabbir如果我没有误解的话,网页内容是由JS动态生成的,而不是“静态的”,因此一个简单的HTTP请求是不够的,OP可能需要实际解释页面。@Wongzigi已经将给定的java脚本注入到webView中,当ajax加载完成时,它可以调用objective C的任何方法。