Javascript 尝试获取HTML内容时被阻止
我试图从一个网站获取HTML内容,但它被JavaScript阻止 以下是实施方案: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
- (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的任何方法。