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

标签 javascript phantomjs

我试图让 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/

相关文章:

javascript - AnimTrap CSS动画循环

javascript - 为什么我需要一个 Selenium Server 而不是直接调用 WebDriver 实现

python - Selenium PhantomJS webdriver 无法获取 ajax 内容

phantomjs - 用于调试 phantomjs 脚本的 GUI

javascript - 为什么更改 XMLHttpRequest 会破坏 FB?

javascript - 如何使用 jQuery 变量隐藏 HTML 表格行

javascript - 使用 PhantomJS 获取 AdSense 广告的 DOM

java - 使用 Selenium Webdriver 实现 headless /无 GUI 自动化

javascript - function () {} 分配给变量时是什么意思

javascript - 最后一次按键 5 秒后调用 javascript 函数