【问题标题】:Is there any way to parse html created with javascript in flutter?有什么方法可以解析在颤振中使用 javascript 创建的 html 吗?
【发布时间】:2021-03-07 06:53:52
【问题描述】:

我想使用metadata_fetch package 来获取 OGP。 这个包的实现使用html (parse) package。它适用于大多数网页。 但是,有些网页(例如this one)无法获取。我认为这是因为 html 是由 javascript 生成的。有没有办法解析这样的页面?

【问题讨论】:

    标签: flutter dart flutter-packages flutter-http


    【解决方案1】:

    您应该能够创建一个 webview_flutter 并注入某种 Javascript 来为您遍历 DOM 并将其序列化以返回,这当然会在页面 javascript 已经构建 DOM 之后发生。我还没有这样做,但这可能是一个有趣的项目。

    编辑:它可能就像捕获document.firstElementChild.outerHTML 的字符串响应一样简单。

    【讨论】:

    • 对于我的回复延迟表示歉意。我会试试看。非常感谢您的回答!
    【解决方案2】:

    为了他人的利益,这是我根据@Randal Schwartz 的想法制作的来源。

    const String url_unext = 'https://video.unext.jp/title/SID0050925';
    WebViewController _controller;
    Stack(
      children: [
        WebView(
          onWebViewCreated: (controller) {
            _controller = controller;
          },
          javascriptMode: JavascriptMode.unrestricted,
          initialUrl: url_unext,
          onPageFinished: (_) async {
            html = await _controller.evaluateJavascript("window.document.firstElementChild.outerHTML;");
            // Use Metadata_fetch to parse
            final data = getOpenGraphDataFromResponse(html);
            print(data);
          },
        ),
        // else widget here
        Container(),
      ],
    ),
    

    但是,我担心运行恶意脚本。如果有更好的方法,请告诉我。我正在研究使用oembed 的可能性。 再次感谢您,@Randal Schwartz

    【讨论】:

    • 我怀疑 webview 将包含在沙箱中。无法从页面引用任何外部数据或渠道。
    • 我明白了!我很抱歉我是个菜鸟。我无法告诉你我有多感激。
    猜你喜欢
    • 1970-01-01
    • 2020-11-16
    • 1970-01-01
    • 2021-10-22
    • 2020-04-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-23
    • 1970-01-01
    相关资源
    最近更新 更多