2011-05-08 47 views
3

我使用zombie.js,这是一款主要用于测试目的的无头浏览器。它创建一个浏览器对象,一旦函数visit()被调用,您就可以使用给定页面的DOM进行播放。但是,我无法达到这个程度。看起来僵尸中使用的解析器存在问题。 以下是错误:检查DOM元素的Node.js模块

User/murf/Documents/workspace/node_code/node_modules/zombie/node_modules/html5/lib/html5/tokenizer.js:62

有没有人发现了类似的问题?如果是这样,是否有办法绕过它?或者也许有另一个节点模块执行类似的工作?任何想法非常感谢。

感谢

+1

您列出的错误是什么错误发生流向何方。当然还有一个错误*消息*? – 2011-05-08 07:55:58

+0

@Crowder是的。我认为实际展示时间太长了。但这里是一个部分 - >错误:undefined:属性名称:“ 在Object.createAttribute – fabricemarcelin 2011-05-08 08:00:17

回答

5

ZombieJS和其他网络测试工具是建立在JSDOM这是很容易使用,就像僵尸。然而,事情是你没有的东西,如“型”,但你可以很容易地模仿它JSDOM,例如:

var jsdom = require("jsdom"); 

jsdom.env("http://nodejs.org/dist/", [ 
    'http://code.jquery.com/jquery-1.5.min.js' 
], function(errors, window) { 
    console.log("there have been", window.$("a").length, "nodejs releases!"); 
}); 

所以如果你想例如模拟类型,你是从JSDOM代码示例, “将不得不触发例如​​手动

$('someInput') 
       .val('x') 
       .keydown(); 

在某种程度上将模拟type('x'),为前。对于谷歌搜索,将触发获取建议框。
但是,为了正确模拟它,你必须用keyCode和所有东西创建一个keydown事件。

我正在为节点的新模拟浏览器称为htmlnode,但在进行的工作,预计可于下周,它建立在HtmlUnit顶部。

其他选项:

+0

非常感谢你。这是非常有帮助的。 – fabricemarcelin 2011-05-08 16:44:28

+0

@fabricemarcelin我的荣幸:) – 2011-05-08 17:18:12