将javascript注入zombie.js

时间:2014-04-10 13:19:39

标签: javascript node.js phantomjs zombie.js headless-browser

嗨我想知道节点js和zombie js是否有能力将javascript文件注入无头浏览器,类似于你可以用phantomjs做的。

例如,在幻影js中你会这样做:

page.injectJs("amino/TVI.js")

我已经使用了phantomjs,它确实做了我想做的事情但是我正在测试其他选项,因为使用幻像js需要很高的内存。

2 个答案:

答案 0 :(得分:6)

您可以将脚本标记附加到文档对象中,因为它支持僵尸中的DOM API。

以下示例显示如何将jquery插入zombie主页:

var Browser = require("zombie");
var assert = require("assert");    

// Load the page from localhost
browser = new Browser()
browser.visit("http://zombie.labnotes.org/", function () {    

  assert.ok(browser.success);

  // append script tag
  var injectedScript = browser.document.createElement("script");
  injectedScript.setAttribute("type","text/javascript");
  injectedScript.setAttribute("src", "http://code.jquery.com/jquery-1.11.0.min.js");    

  browser.body.appendChild(injectedScript);    

  browser.wait(function(window) {
    // make sure the new script tag is inserted
    return window.document.querySelectorAll("script").length == 4;
  }, function() {
    // jquery is ready
    assert.equal(browser.evaluate("$.fn.jquery"), "1.11.0");
    console.log(browser.evaluate("$('title').text()"));
  });
});

答案 1 :(得分:0)

尝试相反的想法。你已经掌握了僵尸所需的一切,以便注入你想要的一切。

例如:that.browser.window指向jsdom窗口,您的网站javascript的每个部分都用作基础。因此,您可以访问已加载的页面中的dom和所有其他窗口对象。

我不知道你想要注射什么 - 你不应该用它进行测试,但看起来这不是你的实际目标