Como abrir o pop-up em um loop e executar o retorno de chamada de acordo para retornar o status? (Script Greasemonkey)

Não consegui formular um título adequado para essas perguntas, então descreverei a idéia / problema aqu

Então, atualmente tenho 2 scripts para uma tarefa:

Primeiro script: executa o loop de todas as imagens em um site específico e, se não tiverem sido votadas antes de abrir o pop-up de votação fornecido pelo portal (no máximo 20 imagens por vez

Segundo script: define o voto para a imagem e envia o formulário, após o envio do formulário fechar o pop-u

O problema aqui é que, após algum tempo, a janela pop-up define o campo captcha para evitar esse tipo de coisa :). Portanto, a verdadeira questão é: Posso combinar dois scripts em um e, no meu loop, aguardar o pop-up abrir e verificar se o campo captcha está lá? Eu poderia parar o loop e dizer ao usuário para inserir manualmente o captcha e recarregar a página depois disso. Atualmente, o script (ofc) irá apenas executar e abrir pop-ups (como posso esperar em loop para o pop-up abrir e carregar o DOM)?

Bah, realmente difícil de explicar, por favor, diga-me se precisar de mais informaçõe

EDIT: Ok, vamos mudar:Como abrir o pop-up em loop e aguardar o retorno de chamada do script pop-up e só então, dependendo do status do retorno, continua

Todo o script GM:

// ==UserScript==
// @name           Open image popups and vote
// @namespace      Popuopener
// @description    Open image popups and vote
// @include        http://example.com/friend/*
// @include        http://example.com/window/friend/*
// @require        http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js
// ==/UserScript==

// Loop options
var start_Script = true;
var loop = 0;

// Photo rating options
var formProcessedAlready = false;

if(start_Script){

    $('form[name="form_gallery"] .img img').each(function(i,e){
        if($(this).closest('.object').children('.phs_voted_count').length == 0){
            var string = e.src;
            var nowBrake = string.substring(string.length-7,7);
            var splited = nowBrake.split('/');
            var urlStr = '/window/friend/gallery_view/'+splited[3]+'/'+splited[4]+'.html';
            wondows = window_open(urlStr, 700, 630);
            if(wondows.getElementById("vte_mark_5")){ // Trows me with wondows.getElementById is not a function
                alert("Popup loaded"); // Does not getting so far 
            }else if(wondows.getElementsByName("captcha")[0]){
                alert("Captcha inside");
                return false;
            }
            if($('input[name="captcha"]').length > 0){
                alert('Enter captcha then (F5)!');
                return false;
            }else{
                    if($('#vte_mark_5').length > 0){
                        $('#vte_mark_5').attr('checked', true);
                        $('form[name="popup_form"]').submit();  
                    }else{
                        formProcessedAlready = true;
                    }

                    if(formProcessedAlready){
                        window.close();
                    }
            }
        }else{
            loop++;
        }
        alert("End");
    }

}

function window_open(url, width, height, name, scroll_bar, location){

    _top = Math.ceil((screen.height - height)/2);
    _left = Math.ceil((screen.width - width)/2);

    if(scroll_bar != true){
        var scroll = 'no';
    }else{
        var scroll = 'yes';
    }
    if(typeof location != "undefined" && location == true){
        var location = 'yes';
    }else{
        var location = 'no';
    }

    if(name == undefined){
        name = Math.round(999999 * Math.random());
    }
    return window.open(url, name , 'width=' + width + ',height=' + height + ',location='+ location +',status=no,toolbar=no,menubar=no,resizable=yes,scrollbars=' + scroll + ',top=' + _top + ',left=' + _left);
}

questionAnswers(2)

yourAnswerToTheQuestion