我试图在颤动中执行Web解析。我想抓住某个网站https://www2.9anime.to/watch/black-clover-dub.2y44/0wql03的所有剧集链接和号码
这是我解析html的代码:
var url = 'https://www2.9anime.to/watch/black-clover-dub.2y44/0wql03';
http.Response response = await http.get((url));
dom.Document document = parse(response.body);
List<dom.Element> rapidvideoepisodelinks = document.getElementsByTagName('#servers-container');
List<Map<String, dynamic>> rapidvideoepisodelinkMap = [];
for (var link in rapidvideoepisodelinks) {
rapidvideoepisodelinkMap.add(
{
/////////////////////some logic////////////////////
});
}
var rapidvideoepisodejson = json.encode(rapidvideoepisodelinkMap);
rapidvideoepisodelist = (json.decode(rapidvideoepisodejson) as List)
.map((data) => new Rapidvideoepisodelist.fromJson(data))
.toList();
setState(() {
isLoading = false;
});
但问题是,剧集内容区域需要几秒钟才能加载。 http.get在加载这个部分之前就过早地加载了网站。因此,我无法完全解析它。包含该集的此区域甚至未加载,因此不会解析其HTML。除了像这样需要额外时间加载的区域外,其他所有东西似乎都能正常工作。
有没有办法解决这个问题?就像在网站完全加载之后解析网站一样。
任何帮助真的很感激。
你的想法并不正确。你无法解析它的原因不是因为部分负载。 http.get正在获取HTML文件。就这样。你只是得到HTML文件,你得到它。您在浏览器中看到的不是该HTML文件。您的浏览器首先获取HTML文件,然后从HTML文件中找到它应该加载的其他内容,然后加载JPG文件,CSS文件,JS脚本等...
您尝试解析的内容是通过在浏览器中执行JS脚本来操纵的。你无法用http.get
实现这一目标。我不确定如何在颤动中实现你想要的东西。您可能需要在dart中使用某种伪浏览器来加载URL,然后解析生成的html。你永远无法使用http.get
来实现它,因为你确实得到了HTML文件,但实际上你并不是在寻找那个HTML文件。我不确定你是否能理解我的意思。