gpt4 book ai didi

javascript - PhantomJS 从 "json+ld"以外的 html 快照中删除脚本标签

转载 作者:行者123 更新时间:2023-11-30 12:13:21 25 4
gpt4 key购买 nike

我正在使用 PhantomJS 创建我的网站页面的快照,我想从生成的 html 快照中删除脚本标签,但我想在它们的类型为“application/ld+json”时保留它们以用于 SEO 目的.

我知道如何删除所有脚本标签(content=html 快照的内容):

content.replace(/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi, "") ;

我希望上面的代码对某些人有用,并且知道如何更改上面的正则表达式以让它保留类型为“application/ld+json”的脚本标签或以正则表达式以外的方式进行。

例子:

<head>........
<script type="application/ld+json">
{ "@context" : "http://schema.org",
"@type" : "Organization",
"name" : "MyOrg",
"url" : "https://www.myorg.com",
}
</script>
....
</head>........

最佳答案

我以前没有实际使用过 PhantomJS,但看起来您可以在使用 page.evaluate() 检索页面后操作 DOM。也许可以使用 DOM API 而不是正则表达式来删除适当的 script 元素?例如

page.evaluate(function() {
Array.prototype.slice.call(document.getElementsByTagName("script")).filter(function(script) {
return script.type != "application/ld+json";
}).forEach(function(script) {
script.parentNode.removeChild(script);
});
return document.documentElement.outerHTML; // or whatever is appropriate
})

我下载了 PhantomJS 并进行了快速测试,似乎有效 :) 这是我使用的:

var fs = require('fs');
var page = require('webpage').create();
page.open('...', function(status) {
if(status === "success") {
var result = page.evaluate(function(success) {
Array.prototype.slice.call(document.getElementsByTagName("script")).filter(function(script) {
return script.type != "application/ld+json";
}).forEach(function(script) {
script.parentNode.removeChild(script);
});
return document.documentElement.outerHTML;
});

fs.write("output.html", result, "w");
}

phantom.exit();
});

关于javascript - PhantomJS 从 "json+ld"以外的 html 快照中删除脚本标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33135966/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com