有什么方法可以解析用javascript创建的html吗?
Is there any way to parse html created with javascript in flutter?
我想使用 metadata_fetch package 获取 OGP。
这个包的实现使用了html (parse) package。它适用于大多数网页。
但是,有些网页无法获取,例如 this one。我认为这是因为 html 是由 javascript 生成的。有什么办法也可以解析这样的页面吗?
您应该能够创建一个 webview_flutter
并注入某种 Javascript,它会为您遍历 DOM 并为 return 序列化它,其中当然会在页面 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.
我想使用 metadata_fetch package 获取 OGP。 这个包的实现使用了html (parse) package。它适用于大多数网页。 但是,有些网页无法获取,例如 this one。我认为这是因为 html 是由 javascript 生成的。有什么办法也可以解析这样的页面吗?
您应该能够创建一个 webview_flutter
并注入某种 Javascript,它会为您遍历 DOM 并为 return 序列化它,其中当然会在页面 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.