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