Node.js 如何使用zombie.js激活javascript链接
我试图让zombie.js激活一个使用javascript的链接。我正在测试它的页面是:Node.js 如何使用zombie.js激活javascript链接,node.js,zombie.js,Node.js,Zombie.js,我试图让zombie.js激活一个使用javascript的链接。我正在测试它的页面是: <html> <body> <div id="test123"> START_TEXT </div> <a href="javascript:go()">GO</a><br/> <script type="text/javascript"> go = function() { v
<html>
<body>
<div id="test123">
START_TEXT
</div>
<a href="javascript:go()">GO</a><br/>
<script type="text/javascript">
go = function() {
var el = document.getElementById("test123");
el.innerHTML = "CHANGED";
}
</script>
</body>
</html>
我收到错误消息:
node.js:201
throw e; // process.nextTick error, or 'error' event on first tick
^
Error: Cannot load resource: javascript:go()
at History._resource (/home/julian/temp/node_modules/zombie/lib/zombie/history.coffee:75:15)
at History._pageChanged (/home/julian/temp/node_modules/zombie/lib/zombie/history.coffee:60:21)
at History._assign (/home/julian/temp/node_modules/zombie/lib/zombie/history.coffee:213:19)
at Object.location (/home/julian/temp/node_modules/zombie/lib/zombie/history.coffee:51:24)
at Object.click (/home/julian/temp/node_modules/zombie/lib/zombie/jsdom_patches.coffee:31:59)
at Object.dispatchEvent (/home/julian/temp/node_modules/zombie/node_modules/jsdom/lib/jsdom/level2/html.js:480:47)
at /home/julian/temp/node_modules/zombie/lib/zombie/eventloop.coffee:130:16
at EventLoop.perform (/home/julian/temp/node_modules/zombie/lib/zombie/eventloop.coffee:121:7)
at EventLoop.dispatch (/home/julian/temp/node_modules/zombie/lib/zombie/eventloop.coffee:129:19)
at Browser.dispatchEvent (/home/julian/temp/node_modules/zombie/lib/zombie/browser.coffee:220:30)
当我使用
browser.evaluate(“go()”)
它起作用了。
我缺少什么?它似乎不理解
javascript:code
hrefs。也许您可以获取url,删除javascript:-部分并对其进行评估
免责声明:我自己还没有使用zombie.js。说它将CSS选择器或链接文本作为浏览器的第一个参数。单击link()
。所以你的代码应该可以工作
但是,如果您可以控制页面,请尝试向链接添加id,并使用CSS选择器
browser.clickLink('#thelink', function(e, browser, status) {
var temp = browser.text("div#test123");
console.log("content:", temp);
});
Zombie.js不处理href上带有“javascript:”的链接(撰写本文时) 我通过在源代码中添加3行来修复它。查找/node_modules/zombie/lib/zombie/history.coffee并添加用FIX注释的3行(注意在.coffee中,您必须尊重缩进,即使用2个空格):
我可能应该在github.com上fork zombie.js并将其放入Pull请求中,但在此之前,欢迎您使用此代码片段,或在我之前提出该Pull请求。我尝试过,结果是一样的。找到链接后,问题就出现在javascript:go()部分。其他链接也可以。哦,我明白了。看起来tuhoojabotti的答案是正确的,它看起来不像zombie.js支持这种链接。这个问题已经有了一个解决方案。
browser.clickLink('#thelink', function(e, browser, status) {
var temp = browser.text("div#test123");
console.log("content:", temp);
});
# Location uses this to move to a new URL.
_assign: (url)->
url = @_resolve(url)
# FIX: support for javascript: protocol href
if url.indexOf("javascript:")==0
@_browser.evaluate(url.substr("javascript:".length))
return
was = @_stack[@_index]?.url # before we destroy stack
@_stack = @_stack[0..@_index]
@_stack[++@_index] = new Entry(this, url)
@_pageChanged was