Back to Repository

Sócio Vasco

1 upvotes
By joaotrovao93@gmail.com
After page load (document_end)

Description

meia/inteira (todos setores)

Match Pattern

https://vasco.eleventickets.com/*

Script Code

function waitForElement(selector, callback) {
  const observer = new MutationObserver((mutations, observer) => {
    if (document.querySelector(selector)) {
      callback();
      observer.disconnect();
    }
  });

  observer.observe(document.body, {
    childList: true,
    subtree: true,
  });
}

const getTicket = (setor) => {
  const setorElement = document.querySelector(`.${setor}`);
  console.log("🚀 ~ getTicket ~ setorElement:", setorElement);
  if (!setorElement) return;

  setorElement.dispatchEvent(new MouseEvent("click", { bubbles: true }));

  waitForElement(".content-ingressos", () => {
    const contentIngressos = [
      ...document.querySelectorAll(".content-ingressos"),
    ];

   
    const prioridade = [
      "Meia",
      // "Gratuidade Idoso",
    ];
    let ingressoSelecionado = null;
    let botaoSoma = null;
    
    for (const tipo of prioridade) {
      ingressoSelecionado = contentIngressos.find(el => {
        const span = el.querySelector(".dscproduto-container .ng-binding");
        if(span && span.textContent.trim() === tipo) {
          const verifyBtnSum = el.querySelector(".botao-soma")
          
          if(verifyBtnSum) {
            botaoSoma = verifyBtnSum;
            return true;
          }
        };
      });
    }
    
    // console.log("🚀 ~ getTicket ~ ingressoSelecionado:", ingressoSelecionado)

    if (!botaoSoma) {
      console.log("🚀 Botão de soma não encontrado.");
      window.location.reload();
      return;
    }

    try {
      console.log("🚀 ~ getTicket ~ botaoSoma:", botaoSoma);
      botaoSoma.click();
    } catch (error) {
      console.log("Erro ao clicar no botão de soma:", error);
    }

    const btnFinalizar = document.querySelector(".botao-avancar");

    try {
        btnFinalizar.click();
    } catch (error) {
        console.log("Erro ao clicar no botão finalizar:", error);
    }   

  });
};


// waitForElement(".bloco_00e2c6e64148d93908354f4436e08a530736082f", () => {
//   const setores = [
//     "bloco_00e2c6e64148d93908354f4436e08a530736082f",
//     "bloco_a1b2c3d4e5f6",
//     "bloco_f6e5d4c3b2a1"
//   ];

//   // Procura algum setor disponível (sem desabilita-cursor)
//   const setorDisponivel = setores.find((setor) => {
//     return document.querySelector(`.${setor}:not(.desabilita-cursor)`);
//   });

//   if (setorDisponivel) {
//     console.log("Setor disponível encontrado:", setorDisponivel);
//     getTicket(setorDisponivel);
//   } else {
//     console.log("Nenhum setor disponível para venda online.");
//     setTimeout(() => {
//       window.location.reload();
//     }, 3000);
//   }

//   return;
// });

waitForElement("path.leaflet-interactive", () => {
  // pega TODOS os blocos disponíveis (sem desabilita-cursor)

  const blocosDisponiveis = document.querySelectorAll(
    ".leaflet-interactive:not(.desabilita-cursor)"
  );

  if (blocosDisponiveis.length > 0) {
    const randomIndex = Math.floor(Math.random() * blocosDisponiveis.length);
    console.log("Bloco disponível encontrado!", blocosDisponiveis.length, randomIndex);

    // pega a classe bloco_xxx do primeiro disponível
    const blocoClass = [...blocosDisponiveis[randomIndex].classList]
      .find(cls => cls.startsWith("bloco_"));

    if (blocoClass) {
      getTicket(blocoClass);
    }
  } else {
    console.log("Nenhum bloco disponível, recarregando...");
    window.location.reload();
  }
});
Install requires the InjectJS Chrome extension. Scripts run only on sites matching the pattern above. Review code before installing any community script.