我正在使用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.
解决方法
原文地址:https://www.jb51.cc/js/157387.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。