Instale o zBot (para Windows). Rode este sistema no seu computador e vários outros que podem ser baixados diretamente pelo zBot ou criados por você mesmo(a)!
09/12/2023 | Build: 107
Do pacote: Gestão de grupos Whats
Descrição: Funções para obter a lista de grupos que você participa, identificar grupos que você não participa mais ou foi removido. Também tem funções para facilitar o envio de mensagens para seus grupos
&CriarBotao("(1) Abrir Whats Web";"abrir whatsapp web")
&CriarBotao("(2) Exibir grupos";"exibir lista grupos")
//&CriarBotao("abrir grupo";"abrir grupo")
&CriarBotaoPopup("Configurações...";"Configurações, Abrir grupo atual, Eliminar repetidos, Zerar status"; "configurações, abrir grupo, eliminar repetidos, zerar status")
//&CriarBotao("Extrair lista de grupos";"extrair todos os grupos")
&CriarBotaoPopup("Extrair...";"Configurações, Extrair lista de seus grupos, Extrair links de grupo da página aberta";"configurações, extrair todos os grupos, extrair dados";100)
&CriarBotaoPopup("Enviar...";"Definir mensagem, Enviar mensagem para todos, Efetuar teste (navega nos grupos mas não submete a mensagem, Zerar status dos seus grupos)";"definir mensagem, enviar produção, enviar teste, zerar status";100)
//&CriarBotao("Eliminar repetidos";"eliminar repetidos")
//&CriarBotao("obter nome grupo";"obter nome grupo")
//&CriarBotao("Definir mensagem";"definir mensagem";200) //*
//&CriarBotao("Enviar mensagem";"efetuar envios";200) //*
#enviar teste
[teste] = "sim"
&BlocoExec("efetuar envios")[0] //*
#
#enviar produção
[teste] = "não"
&BlocoExec("efetuar envios")[0] //*
#
#zerar status
&TbComando("primeiro")[0]
&marcador("loop zerar")
&TbValorDefinir("status"; "")[0] //*
&TbComando("próximo")[0]
&Se([último resultado];igual;"OK")
&VaiPara("loop zerar")
.fimse
&TbComando("primeiro")[0]
#
// Função principal que:
// 1- Envia a mensagem
// 2- vai para o próximo grupo
// O que importa é o seguinte: com uma busca, manda para um grupo. Qualquer que seja o grupo usado para o envio, não será repetido
#efetuar envios
[envios] = 0
[lista enviados] = ""
[erros] = 0
&TbComando("primeiro")[0]
[qtd_zerar] = 0
&Marcador("loop envios")
&Se([qtd_zerar];#-/=;3)
[qtd_zerar] = 0
&StatusInserir("Reiniciando navegador para não ficar pesado...";"preto")[0]
&BlocoExec("abrir whatsapp web")[20] //*
&BlocoExec("exibir lista grupos")[3] //*
&StatusInserirExtra("OK";"sucesso")[0]
.fimse
//* Pega o nome do grupo atualmente aberto
[nome do grupo] = ""
&TbLerCampo("nome")[0] //*
//* Se erros #-/ 5, vai para o próximo grupo
&Se([erros];maior;5)
[erros] = 0
&StatusInserir("Desisti do grupo [nome]. Indo para o próximo...";"erro")[0]
&VaiPara("continuar")
.fimse
//* se status não é vazio ou se ativo = não. Pula o grupo
&TbLerCampo("status")[0] //*
&Se([status];diferente;"")
&StatusInserir("Só há envio quando status é vazio";"erro")[0]
&VaiPara("continuar")
.fimse
//* se status não é vazio ou se ativo = não. Pula o grupo
&TbLerCampo("ativo")[0] //*
&Se([ativo];igual;"não")
&StatusInserir("O grupo [nome] está desativado na tabela";"erro")[0]
&VaiPara("continuar")
.fimse
//* Abre o grupo selecionado na tabela
&StatusInserir("Abrindo grupo [nome]...";"preto")[0]
&BlocoExec("abrir grupo")[2] //* Abre o grupo atual da tabela
// abrir grupo seta a variável falha abrir
&Se([falha abrir];igual;"sim")
&StatusInserir("Abertura não detectada: [nome]";"erro")[0]
&StatusInserir("Pulando para o próximo grupo";"alerta")[0]
&VaiPara("continuar")
.fimse
&StatusInserirExtra("texto";"cor")[0] //* cor: erro, sucesso, alerta, preto, cinza, importante
&StatusInserirExtra("OK";"sucesso")[0]
&ValorInc("qtd_zerar";1)[0] //*
&StatusInserir("Verificando nome do grupo...";"preto")[0]
&BlocoExec("obter nome grupo")[0] //* obtém o nome do grupo aberto e coloca em "nome do grupo"
&StatusInserirExtra("OK";"sucesso")[0]
&Se([nome do grupo];igual;"")
&ValorInc("erros";1)[0] //*
&StatusInserir("Nome vazio. Tentando novamente... ([erros])";"erro")[0]
//&StatusInserir("Pausa de 5 segundos para aguardar carregamento de dados...";"alerta")[5]
&VaiPara("loop envios")[2] //* Se for vazio, tenta novamente... Pode ser só questão de espaerar mais
.fimse
// Verifica se o "nome do grupo" já foi processado
&TextoTemValorLista([nome do grupo];[lista enviados];"resultado")[0] //* Retorna sim | não
&Se([resultado];igual;"sim")
&ValorInc("erros";1)[0] //*
&StatusInserir("Já processou [nome do grupo]. Indo para o próximo";"erro")[0]
//&Mensagem([lista enviados])
[erros] = 0
&VaiPara("continuar")
.senao
&StatusInserir("Enviando para: [nome do grupo]";"importante")[0]
&ValorInserirLinha("lista enviados";[nome do grupo])[2] //*
&Se([teste];igual;"não")
// Faz o envio do texto ou da imagem
&Se([local imagem];diferente;"")
&BlocoExec("enviar imagem")[0] //*
&StatusInserir("Imagem enviada!";"sucesso")[0]
.senao
&BlocoExec("enviar texto")
&StatusInserir("Texto enviado!";"sucesso")[0]
.fimse
.senao
&StatusInserir("Está em modo teste (mensagem não enviada)";"preto")[1]
&StatusInserir("Neste ponto a mensagem seria enviada!";"sucesso")[1]
.fimse
// // //
[erros] = 0
&ValorInc("envios";1)[0] //*
&TextoObterDataHora("hoje")[0] //*
&TbValorDefinir("status"; [hoje])[0] //*
.fimse
// Vai para próximo registro da linha e continua o envio se houver mais
&Marcador("continuar")
&TbComando("próximo")[0]
&Se([último resultado];igual;"OK")
&VaiPara("loop envios")
.fimse
&StatusInserir("Fim da tabela";"preto")[0]
#
#abrir grupo
[falha abrir] = "não"
[tentativas] = 0
&TbLerCampo("nome")[0] //*
&NavegadorClicarPerguntar(11209140247319;"local do campo de pesquisa")[1] //*
&DigitarEsc()[0.5]
&NavegadorClicarPerguntar(11209140247319;"local do campo de pesquisa")[1] //*
&ColarTexto([nome])[2.5]
&Pausar([pausa extra])
&DigitarID(40)[2] //* seta para baixo
// Agora aguarda até o grupo abrir
[tentativas]=1
&Marcador("loop abrir grupo")
&NavegadorTextoObter("texto navegador")[0] //*
&TextoTem([texto navegador];"para o grupo porque";"retorno")[0] //* Retorna sim | não
&Se([retorno];igual;"sim")
&StatusInserir("Você não está mais neste grupo";"erro")[0]
[falha abrir] = "sim"
&TbValorDefinir("ativo"; "não")[0] //*
&TbValorDefinir("obs"; "Você não está neste grupo")[0] //*
&VaiPara("sair abrir")
.fimse
&TextoTem([texto navegador];"você não participa mais";"retorno")[0] //* Retorna sim | não
&Se([retorno];igual;"sim")
&StatusInserir("Você não está mais neste grupo";"erro")[0]
[falha abrir] = "sim"
&TbValorDefinir("ativo"; "não")[0] //*
&TbValorDefinir("obs"; "Você não está neste grupo")[0] //*
&VaiPara("sair abrir")
.fimse
&TextoTem([texto navegador];"omente admin";"retorno")[0] //* Retorna sim | não
&Se([retorno];igual;"sim")
&StatusInserir("Só admins podem enviar mensagem neste grupo";"erro")[0]
[falha abrir] = "sim"
&TbValorDefinir("ativo"; "não")[0] //*
&TbValorDefinir("obs"; "Só admins podem enviar mensagem")[0] //*
&VaiPara("sair abrir")
.fimse
&TextoTem([texto navegador];"Digite uma mensagem";"retorno")[0] //* Retorna sim | não
&Se([retorno];igual;"não")
&StatusInserir("Aguardando grupo abrir... [tentativas]";"alerta")[0]
&Se([tentativas];menor;5)
&ValorInc("tentativas";1)[2] //*
&VaiPara("loop abrir grupo")
.senao
[falha abrir] = "sim"
&StatusInserir("Não foi detectada a abertura do grupo";"erro")[0]
.fimse
.fimse
&Marcador("sair abrir")
#
#definir mensagem
&ValorPedirVarios("Mensagem para enviar no grupo"; "local imagem, mensagem")[0] //*
#
#eliminar repetidos
&TbExcluirRepetidos("nome")[0] //*
#
//* Pega o nome do grupo abrindo os detalhes no painel direito
#obter nome grupo
[nome do grupo] = ""
&Pausar([pausa extra])
&NavegadorClicarPerguntar(11209122038686;"Local do nome do grupo no painel direito")[1.5] //*
&NavegadorTextoObter("texto navegador")[0] //*
&TextoEntre([texto navegador];"Dados do grupo";"Grupo · Membros:";"nome do grupo")[0] //*
&NavegadorClicarPerguntar(11209122038687;"Local para fechar os dados do grupo")[1] //*
#
#abrir whatsapp web
[whatsapp_url] = "https://web.whatsapp.com/send?phone="
&NavegadorIr([whatsapp_url])[1] //*
&NavegadorPosicionar(5;5;925;675)[0] //* topo, esquerda, largura, altura
&MonitorEscala("escala") //* retorna 100, 125, 150 etc.
&Se([escala];diferente;100)
&NavegadorPosicionar(5;5;1155;775)[0]
.fimse
#
#configurações
&ValorPedirVarios("Configurações";"Qtd. rolar lista de grupos, pausa extra")[0] //*
#
// pega a lista de grupos possível na listagem atual
#obter lista grupos
&StatusInserir("Obtendo texto do Whatsapp web...";"preto")[0]
&NavegadorFonteObter("texto navegador")[0] //*
&StatusInserirExtra("OK";"sucesso")[0]
&StatusInserir("Localizando nomes dos grupos...";"preto")[0]
&TextoExtrairEntre([texto navegador];"#-\span dir=auto title=";" aria";"lista grupos") [0]
&StatusInserirExtra("OK";"sucesso")[0]
#
// comandos para listar os grupos no Whatsapp web
#exibir lista grupos
&NavegadorClicarPerguntar(11205164212535;"Botão 'Filtrar'")[1] //*
&NavegadorClicarPerguntar(11205164406862;"Opção 'Grupos'")[0.5] //*
&NavegadorClicarPerguntar(11205164406862;"Opção 'Grupos'")[1] //*
&NavegadorClicarPerguntar(11205164406863;"Local do primeiro resultado")[0] //*
#
// usa a variável [lista final] para colocar os grupos inéditos na tabela
#inserir grupos na tabela
&TextoEliminarRepetidos([lista final];"lista final")[0] //*
&TextoSubstituir([lista final]; " *pontoevirgula*"; " "; "lista final")[0] //*
&TextoDecodificarHTML([lista final]; "lista final")[0] //*
&TextoQtdLinhas([lista final]; "qtd")[0] //*
&Repetir([qtd]) //* a variável _indice terá o número do ciclo atual
[grupo atual] = [lista final*[_indice]]
[linha] = ""
&TbLocalizar("nome";[grupo atual]; "linha")[0] //*
&Se([linha*nome];diferente;[grupo atual])
&TbInserir("nome";"[grupo atual]")[0] //*
.fimse
.fimrepetir
#
// ***
// Função principal para extrair os grupos listados
// usa #exibir lista grupos, #obter lista grupos, #inserir grupos na tabela
#extrair todos os grupos
//&BlocoExec("exibir lista grupos")[0] //*
&BlocoExec("obter lista grupos")[0] //*
&Repetir([Qtd. rolar lista de grupos]) //* a variável _indice terá o número do ciclo atual
&ValorInserirLinha("lista final";[lista grupos]")[0] //*
&NavegadorClicarPerguntar(11209093941608;"local para rolar a lista de grupos")[2] //*
.fimrepetir
//[lista final] = [lista grupos]
&BlocoExec("inserir grupos na tabela")[0] //*
#
// Extrai emails e telefones da variável "dados" e insere na tabela os que não existirem
#extrair dados
&TextoGerarIdUnico("id único")[0] //*
&TextoObterDataHora("hoje")[0] //*
&TextoDataInfo([hoje]; "secao_data"; "hoje")[0] //*
// obtém os links contendo chat.whatsapp do texto fornecido
&NavegadorTextoObter("conteúdo")[0] //*
&TextoExtrairContendo([conteúdo]; "chat.whatsapp.com"; "dados"; "")[0] //*
&TextoQtdLinhas([dados]; "qtd")[0] //*
&Repetir([qtd])
[info] = [dados*[_indice]]
&Se([info];diferente;"")
&TextoTemValorLista([info];[ignorar se tiver];"localizou")[0] //* Retorna sim | não
&Se([localizou];diferente;"sim")
&TbLocalizar("url";[info]; "localizou")[0] //*
&Se([localizou*url];diferente;[info])
// monta a url final do convite de chat
[info] = "https:[info]"
// Elimina links inválidos
&TextoTerminaCom([info];".";"retorno")[0] //* Retorna sim | não
&Se([retorno];igual;"sim")
&VaiPara("saiu")
.fimse
&TextoTem([info];"https://chat.whatsapp.com";"retorno")[0] //* Retorna sim | não
&Se([retorno];diferente;"sim")
&VaiPara("saiu")
.fimse
&Se([info];igual;"https://chat.whatsapp.com")
&VaiPara("saiu")
.fimse
// insere os links na tabela
&TbInserir("url,data_cadastro,id_unico";"[info],[hoje],[id único]")[0] //*
&ValorInc("inseridos";1)[0] //*
&StatusInserir("Inserido: [info] (total: [inseridos])";"sucesso")[0]
&Marcador("saiu")
.senao
&StatusInserir("Já tem no banco: [info]";"erro")[0]
.fimse
.senao
&StatusInserir("Lista de exclusão: [info]";"erro")[0]
.fimse
.fimse
.fimrepetir
#
#enviar texto
&Se([mensagem];"diferente";"") //* teste -#-/ igual, diferente, contém, não contém, começa, não começa, termina, não termina
&NavegadorClicarPerguntar(20231115151639400;"Indique o local do campo onde digita a mensagem")[0.5] //*
&ColarTexto([mensagem])[1] //* Cola um valor definido no parâmetro
&Pausar([pausa operacional extra])
&NavegadorClicarPerguntar(20231115151639401;"Local do botão para enviar a mensagem")[2] //*
.fimse
#
#enviar imagem
&Se([local imagem];"diferente";"") //* teste -#-/ igual, diferente, contém, não contém, começa, não começa, termina, não termina
&NavegadorClicarPerguntar(20231115151639400;"Indique o local do campo onde digita a mensagem")[0.5] //*
&ColarArquivo([local imagem])[5] //*
&Pausar([pausa operacional extra])
&Se([mensagem];"diferente";"")
&NavegadorClicarPerguntar(20231115151639402;"Local do campo de legenda")[1] //*
&ColarTexto([mensagem])[1] //* Cola um valor definido no parâmetro
.fimse
&NavegadorClicarPerguntar(20231115151639403;"Local do botão para enviar a imagem")[2] //*
&Pausar([pausa operacional extra])
.fimse
#