gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 17:56:07 25 4
gpt4 key购买 nike

我正在抓取一个使用 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 描述的那样做类似的事情,尽管我不喜欢它。 Casper 的 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 等待 socket.io 连接返回数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20937627/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com