ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

javascript-如何等待使用casperJS的socket.io连接返回数据?

2019-10-10 00:45:56  阅读:184  来源: 互联网

标签:javascript casperjs


我正在抓取一个页面,该页面使用socket.io填充一些选择标记选项.在评估页面之前,如何等待套接字接收数据?我正在使用casperJS

套接字代码(由目标站点加载):

socket.on('list', function (data) {


$.each(data.match_names, function (id, name) {
    if (some condition) {
        /*nothing*/
    } else {
        if (typeof( varname ) == 'function') {
            $('#myselector').append('<option value="' + id + '">' + name + " " + get_tournament_name(id.substr(0, 4)) + '</option>');
        } else {
            $('#myselector').append('<option value="' + id + '">' + name + '</option>');
        }
        match_count++;
    }
});

我检查socket.io脚本是否已加载:

casper.waitForResource("socket.io.js", function() {
    this.echo('socket.io has been loaded.'); //is printed

//how can I check that data has arrived from 'socket.on('list', function (data)' ?
});

但是选项标签不在页面上,大概是因为我评估页面太早了

casper.then(function() {
    baseTargetUrl = this.evaluate(function() {
        return __utils__.getElementByXPath('//*[@id="wrapper"]/div[1]/a[2]')["href"];
    });
    console.log('logging: '+baseTargetUrl); // works

    casper.thenOpenAndEvaluate(baseTargetUrl ,function() { //baseTargetUrl is no longer undefined, it's a closure now

        $(function(){ // DOM is ready

            var myOptions = [] ;

            $('select#myselector option').each(function(){
                myOptions.push( $(this).text() + ' : '+$(this).val() ); //additional options have not yet been added

            });

        });
    });
});

解决方法:

尽管我不喜欢lud1977所描述的,但您可以执行以下操作.卡斯珀的waitFor通过轮询来工作,而在等待事件发生时这确实很愚蠢.如果这样做,那就更好了:

var list = null; // broader scope

casper.on('socket.list', function() {
  // do stuff with <list> here
});

casper.waitForResource("socket.io.js", function() { 
  var socket = io.connect("http://wherever-the-server-is")
  socket.on('list', function(data){
    list = data;
    this.emit('socket.list');
  }.bind(this));
})

来源:http://docs.casperjs.org/en/latest/events-filters.html

标签:javascript,casperjs
来源: https://codeday.me/bug/20191010/1883152.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有