【发布时间】:2021-03-07 06:53:52
【问题描述】:
我想使用metadata_fetch package 来获取 OGP。 这个包的实现使用html (parse) package。它适用于大多数网页。 但是,有些网页(例如this one)无法获取。我认为这是因为 html 是由 javascript 生成的。有没有办法解析这样的页面?
【问题讨论】:
标签: flutter dart flutter-packages flutter-http
我想使用metadata_fetch package 来获取 OGP。 这个包的实现使用html (parse) package。它适用于大多数网页。 但是,有些网页(例如this one)无法获取。我认为这是因为 html 是由 javascript 生成的。有没有办法解析这样的页面?
【问题讨论】:
标签: flutter dart flutter-packages flutter-http
您应该能够创建一个 webview_flutter 并注入某种 Javascript 来为您遍历 DOM 并将其序列化以返回,这当然会在页面 javascript 已经构建 DOM 之后发生。我还没有这样做,但这可能是一个有趣的项目。
编辑:它可能就像捕获document.firstElementChild.outerHTML 的字符串响应一样简单。
【讨论】:
为了他人的利益,这是我根据@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。
【讨论】: