【问题标题】:Http.get loads and parse website partially before getting HTML in FlutterHttp.get 在 Flutter 中获取 HTML 之前部分加载和解析网站
【发布时间】:2019-08-11 06:15:12
【问题描述】:

我正在尝试在 Flutter 中执行 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 没有被解析。除了像这样需要额外时间加载的区域外,其他一切似乎都运行良好。

有没有办法解决这个问题? 就像在网站完全加载后解析网站之类的。

非常感谢任何帮助。

【问题讨论】:

    标签: android dart flutter dart-html


    【解决方案1】:

    你的想法并不完全正确。您无法解析它的原因不是因为部分负载。 http.get 正在获取 HTML 文件。就这样。你只是得到了 HTML 文件,你得到了它。您在浏览器中看到的不是那个 HTML 文件。您的浏览器首先获取 HTML 文件,然后从 HTML 文件中找到应该加载的其他内容,然后加载 JPG 文件、CSS 文件、JS 脚本等...

    您尝试解析的内容是通过在浏览器中执行 JS 脚本来操作的。 http.get 无法实现这一点。我不确定如何在颤振中实现你想要的。如果有的话,您可能需要某种 dart 中的伪浏览器来加载 URL,然后解析生成的 html。您将永远无法使用http.get 执行此操作,因为您确实获得了 HTML 文件,但您实际上并不是在寻找该 HTML 文件。我不确定你是否能理解我的意思。

    【讨论】:

    • 可以使用cookies吗?
    • @dheerajreddy 抱歉,我不明白你的意思。可以在 dart 中使用 cookie。但我不知道这与你的问题有什么关系。您正在尝试获取由浏览器呈现的 html 结果,而不是真正的 html 文件。为此,您需要某种伪浏览器来首先呈现它。 (PS:我不确定“渲染”是不是在这里使用的正确词)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-16
    • 2012-10-29
    • 2012-02-21
    • 2017-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多