gpt4 book ai didi

javascript - PhantomJS 如何在 html 字符串中呈现 javascript

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

我试图让 PhantomJS 获取一个 html 字符串,然后让它像浏览器一样呈现整个页面(包括在页面源代码中执行任何 javascript)。我需要生成的 html 结果作为字符串。我已经看到了 page.open 的例子,这是没有用的,因为我的数据库中已经有了页面源。

我需要使用 page.open 来触发 PhantomJS 中的 javascript 渲染引擎吗?无论如何都可以在内存中完成这一切(即..没有 page.open 发出请求或从/向磁盘读取/写入html源?

我看过类似的问答here但它并没有完全解决我的问题。运行下面的代码后,我似乎没有做任何事情来呈现 html 源字符串中的 javascript。

var page = require('webpage').create();
page.setContent('raw html and javascript in this string', 'http://whatever.com');
//everything i've tried from here on doesn't execute the javascript in the string

------------更新----------------

根据下面的建议尝试了以下方法,但这仍然不起作用。只返回我提供的未呈现 javascript 的原始源代码。

var page = require('webpage').create();
page.settings.localToRemoteUrlAccessEnabled = true;
page.settings.webSecurityEnabled = false;
page.onLoadFinished = function(){
var resultingHtml = page.evaluate(function() {
return document.documentElement.innerHTML;
});
console.log(resultingHtml);
//console.log(page.content); // this didn't work either
phantom.exit();
};
page.url = input.Url;
page.content = input.RawHtml;
//page.setContent(input.RawHtml, input.Url); //this didn't work either

最佳答案

以下作品

page.onLoadFinished = function(){
console.log(page.content); // rendered content
};
page.content = "your source html string";

但是您必须记住,如果您从字符串设置页面,域将是 about:blank。因此,如果 html 从其他域加载资源,那么您应该使用 --web-security=false --local-to-remote-url-access=true 命令行选项运行 PhantomJS:

phantomjs --web-security=false --local-to-remote-url-access=true script.js

此外,您可能需要等待 JavaScript 执行完成,而当 PhantomJS 认为它已完成时,它可能尚未完成。使用 setTimeout() 等待静态时间或 waitFor()等待页面上的特定条件。这个问题给出了更可靠的等待整页的方法:phantomjs not waiting for “full” page load

关于javascript - PhantomJS 如何在 html 字符串中呈现 javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33600404/

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