我正在使用PhantomJS 2来点击页面的元素.但是,我不知道点击这些元素是否会触发事件(例如页面加载).
我希望能够处理这两种情况:
>当单击元素触发页面加载时,我想等到新页面加载完毕.
>当点击不触发事件时,我希望能够识别(无需等待很长的超时).
在PhantomJS 1中,我可以简单地使用这样的闭包:
function click(page,elem,callback) { var loading = false; page.set('onLoadStarted',function() { loading = true; }); page.set('onLoadFinished',function() { callback('click triggered page load'); }); triggerClick(page,elem); setTimeout(function() { if ( ! loading) { callback('click did not trigger page load'); } },100); }
这里我将关闭加载变量,它充当事件处理程序和setTimeout中函数之间的“通信通道”.
>如果click触发了页面加载,onLoadFinished处理程序将在加载页面后调用回调.
>如果单击不触发页面加载,setTimeout中的函数将在100ms后调用回调(这是可接受的).
此代码在PhantomJS 1下运行良好.
不幸的是,在PhantomJS 2下,onLoadStarted和onLoadFinished的事件处理程序不再能够访问加载变量(即它们看起来不再像闭包一样工作).
所以现在我想知道如何在PhantomJS 2中实现相同的行为.任何想法?
PS:我知道我必须通过PhantomJS 2中的page.property(…)安装事件处理程序,而不是像PhantomJS 1那样使用page.set(…).
编辑:我正在使用节点包phantom(https://www.npmjs.com/package/phantom)作为节点和节点之间的桥梁. phantomjs.