我正在尝试使用以下代码从特定网站异步获取HTML代码:
var response = await httpClient.GetStringAsync("url");
但是问题是该网站通常需要一秒钟的时间来加载网站的其他部分。我需要什么,所以问题是我是否可以先加载该网站并在一定时间后阅读内容。
很抱歉,这个问题是否已经得到回答,但我真的不知道要搜索什么。
谢谢, 二十
如果您想自己尝试使用,URL为http://iloveradio.de/iloveradio/
,则需要不立即加载的标题和艺术家。
答案 0 :(得分:11)
您的方向错误。所引用的站点具有返回json的播放列表api。您可以从获取信息:
http://iloveradio.de/typo3conf/ext/ep_channel/Scripts/playlist.php
编辑:Chome检查器用于查找播放列表链接
答案 1 :(得分:4)
您可以使用Puppeteer-Sharp:
await new BrowserFetcher().DownloadAsync(BrowserFetcher.DefaultRevision);
using (var browser = await Puppeteer.LaunchAsync(new LaunchOptions { Headless = false }))
using (var page = await browser.NewPageAsync())
{
await page.SetViewportAsync(new ViewPortOptions() { Width = 1280, Height = 600 });
await page.GoToAsync("http://iloveradio.de/iloveradio/");
await page.WaitForSelectorAsync("#artisttitle DIV");
var artist = await page.EvaluateExpressionAsync<string>("$('#artisttitle DIV')[0].innerText");
Console.WriteLine(artist);
Console.ReadLine();
}
答案 2 :(得分:3)
如果之后加载了某些内容,则意味着它们是在页面加载后由javascript代码生成的(例如ajax请求),因此无论您等待多长时间,它都不会具有您想要的内容(因为它们在加载时不在源代码中。
简便的方法:
使用WebBrowser
,当DocumentCompleated
事件触发时,要等到所需的元素出现为止。
正确的方法:
自己找到JavaScript并自行触发(说起来容易,很难做到)。
答案 3 :(得分:3)
这里要理解的是,当您从URL读取响应时,您将得到的只是原始响应,在这种情况下,服务器将回复HTML的源代码。
与您在浏览器的DOM Inspector开发人员工具中看到的内容不同,您只会从页面中获取原始HTML源(在“ Page Source”开发人员工具中可能看到的内容),而不会包含任何动态创建的内容( JavaScript)或已加载的内容(如iframe)。
因此您无法在DOM Inspector中看到您所看到的内容:
您将在Page Source(在Chrome中查看>开发人员> View Source)中看到以下内容:
您不能等待其他内容加载,因为由于HTML内容没有像浏览器那样被解析或呈现,因此它永远也不会加载。
不过,您有几个可用选项:
答案 4 :(得分:0)
我已经检查了网站,数据是通过javascript加载的。您只能使用httpClient.GetStringAsync("url");
获取html。
据我所知,要获得由浏览器操纵的元素是没有运气的。