Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/python
- # -*- coding: utf-8 -*-
- """
- #
- #########################################################################
- # #
- # p0211-zapmx5-business p0211-15-fev-2026. #
- # atraves do celular base retransmite medias para lista de contatos #
- # zapm.txt (dd 2 posicoes; cel 9 posicoes) = 11 posic #
- # deve existir nos contatos do dispositivo ou contatos google #
- # ou menmonico do nome do contato (apelido, nickname) #
- # referencias #
- # #
- # https://selenium-python.readthedocs.io/ #
- # https://www.python.org/doc/ #
- # #
- #########################################################################
- #
- # @author: @gsavix 2018-2026 GNU GPL V2
- #
- """
- #bof-p0211-p0211-08-fev-2026.
- import time
- from selenium import webdriver
- from selenium.webdriver.common.keys import Keys # teclas e eventos
- from selenium.webdriver.common.by import By # novos padroes 2021 by
- from selenium.webdriver.common.service import Service # PGM ou SERVICO
- from selenium.webdriver.chrome.options import Options # desabilita opcoes msg debug
- import codecs
- import os # obtem variaveis ambiente
- import warnings
- import sqlite3
- import sys # windows linux
- #
- #
- # myzap - tratar numero de celular 9 ou 8 digitos
- #
- def myzap(axcel):
- axddsp1 = ('11','12','13','14','15','16','17','18','19') # ddds com 11digitos p1
- axddsp2 = ('21','22','23','24','25','26','27','28','29') # ddds com 12digitos p2
- axddd = axddsp1 + axddsp2 # array contendo ddds com 11 digitos
- axcelx = ''
- axcel = axcel.replace('\n','').replace('\r','')
- if axcel[0:2] in axddd: # ddd tem 1x,2x
- axcelx = axcel # mantem 11 digitos
- else:
- axcelx = axcel[0:2] + axcel[3:] # compoe 2 para dd despreza 3digito
- axcel = axcelx
- return axcel
- #
- #
- # p1100 - pool variaveis
- #
- axcelbase = '11987654321' ## celular WHATSAPP base para reencaminhar
- axespera = 20 # tempo medio de sync
- #
- #
- axoptions = Options() # indica opcoes diretorio chromium
- axbase = '' # pointer navegador usado
- axres = '' # resposta no prompt
- #
- axfne1 = './arq/zapm.txt' # arquivo csv de entrada somente numero do zap
- axhdr = 0 # 1 para primeiro registro sequencial leitura entrada
- axvai = False # flag indica se vai ou nao ser enviada media e mensagem
- axcel = '' # numero celular funcao x zap
- #
- axinexp25 = 'Nenhuma conversa, contato' # 25pos msg inexiste contato
- axinexi25 = 'No chats, contacts or mes' # alternativa para contato em ingles
- axinexiste= [axinexp25,axinexi25] # array validação
- axbloq19 = 'Contato bloqueado. ' # t19 contato bloqueado nao enviar
- # # axbloq2023= "Can't send a message to blocked contact gfv2."
- axbloi19 = "Can't send a messag" # bloqueados message
- axcontabloq = [axbloq19,axbloi19] # array para bloqueados
- ixquem = 0 # aponta 5
- axalgum = 0 # pelo menos 1 do grupo de 5
- #
- # p1150 carrega arquivo txt com numeros celulares para retransmissão
- #
- axef1 = codecs.open(axfne1, mode='r', encoding='utf8', errors='surrogateescape') # arquivo de entrada
- axrege1 = axef1.readlines() # carrega array com registros
- axef1.close() # libera arquivo entrada
- #
- # p1200 estabelecer conexao whatsapp e login
- # qual chromium usar deve ser compativel com webdriver
- # onde está localizado o chromium do user
- # #######################
- # apenas no windows para
- # #######################
- if sys.platform == 'linux': ### ambiente linux
- axsys = 'lin'
- else:
- axuser = 'usradm' ########## windows
- if 'username' in os.environ: ########## windows
- axuser = os.environ['username'] ########## windows
- axoptions.binary_location=r'C:/Users/' + axuser + r'/AppData/Local/Chromium/Application/chrome.exe'
- #
- # comum windows linux
- #
- axoptions.add_experimental_option('excludeSwitches', ['enable-logging']) # exclui msg garbage de log
- #
- # informações basicas begin-commit transaction serão armazenadas
- # sqlite3 x5zaplog.db3 tabela axtablog
- ### BEGIN TRANSACTION;
- ### -- CRIAR BANCO DE DADOS x5zaplog.db3
- ### DROP TABLE IF EXISTS axtablog;
- ### --
- ### CREATE TABLE axtablog (
- ### axtimesp DATETIME,
- ### axmsg VARCHAR
- ### );
- ### --
- ### INSERT INTO axtablog (
- ### axtimesp,
- ### axmsg
- ### )
- ### VALUES (
- ### strftime('%Y-%m-%dT%H:%M:%S',datetime('now','localtime')),
- ### '#### BANCO DE DADOS INICIALIZADO ####'
- ### );
- ### --
- ### COMMIT TRANSACTION;
- #
- #
- axcon1 = sqlite3.connect("./log/x5zaplog.db3")
- axnow=time.strftime('[%Y-%m-%dT%H%M%S] [p0211]', time.localtime())
- print(axnow + 'm023 - Conectou SQL DB ./log/x5zaplog.db3 com sucesso.')
- axcur1 = axcon1.cursor()
- #
- #
- #
- axcur1.execute("BEGIN TRANSACTION;")
- axnow1 = time.strftime('%Y-%m-%dT%H:%M:%S', time.localtime())
- axmsg1 = axnow1 + ' ...======BEGIN-TRANSACTION-BOT======... '
- axnow=time.strftime('[%Y-%m-%dT%H%M%S] [p0211]', time.localtime())
- print(axnow + 'm027 - ...======BEGIN-TRANSACTION-BOT======... ')
- #
- # transacao inicial log
- #
- axcur1.execute("insert into axtablog(axtimesp, axmsg) values (?, ?);", (axnow1, axmsg1))
- axcur1.execute("commit")
- axnow=time.strftime('[%Y-%m-%dT%H%M%S] [p0211]', time.localtime())
- print(axnow + 'm029 - ...======COMMIT-TRANSACTION-EOT======... ')
- #
- # PROMPT PARA PROSSEGUIR
- #
- axnow=time.strftime('[%Y-%m-%dT%H%M%S] [p0211]', time.localtime())
- print(axnow + 'm100 - #######################################################')
- print(axnow + 'm113 - # BOJ - P0211-ZAPMX5-BUSINESS p0211-15-fev-2026. #')
- print(axnow + 'm101 - # 1-Fazer a Leitura QR. #')
- print(axnow + 'm102 - # 2-Validar e Contar Medias e Frames. #')
- print(axnow + 'm103 - # 3-Atualizar e Autorizar Navegador receber notif. #')
- print(axnow + 'm113 - # ----------------------------------------- #')
- #
- #
- #
- axbase = webdriver.Chrome(options=axoptions) # utiliza chromium
- axbase.get('https://web.whatsapp.com') # acessa whatsapp web
- axnow=time.strftime('[%Y-%m-%dT%H%M%S] [p0211]', time.localtime())
- #
- #
- #
- print(axnow + 'm105 - # ATENCAO Aguardando sua resposta... ... ... ... ... #')
- print(axnow + 'm107 - # Certifique-se que entre seu celular e O GFBASE #')
- print(axnow + 'm109 - # existam apenas as medias/msgs que quer retransmitir #')
- print(axnow + 'm113 - # #')
- print(axnow + 'm110 - # *** NA DUVIDA NAO PROSSIGA *** #')
- print(axnow + 'm113 - # ------------------ #')
- print(axnow + 'm113 - # versao p0211-15-fev-2026. p0211-zapmx5-business #')
- print(axnow + 'm113 - # ------------------ #')
- print(axnow + 'm117 - # Qdo pronto informar QTD MEDIAS e pressionar ENTER. #')
- print(axnow + 'm100 - #######################################################')
- axres = input(axnow + 'm119 - ... aguarda sua resposta ') # aguarda resposta num medias
- axnow=time.strftime('[%Y-%m-%dT%H%M%S] [p0211]', time.localtime())
- print(axnow + 'm114 - # ... Continuando ... zap x5, base ..=> ' + axcelbase + ' | medias = ' + axres + ' #')
- axresn = 0
- if axres.isdigit():
- axresn = int(axres) # resposta numerica ok
- else:
- axresn = 1 # de outra maneira assume 1 media
- #
- # p1300 busca celular base para retransmissão medias
- #
- axclil = list() # lista com numeros após função zap
- axnreg = len(axrege1) # quantos registros tem no arquivo de entrada
- axiter = int(axnreg / 5) # multiplos de 5
- axptr = 0 # pointer para leitura de 5 em 5
- for axl in range(1,axiter+1): # a finalidade é ler de 5 em 5
- axalgum = 0 # vai enviar algum
- axclil = list() # para cada 5 reinicia a lista em branco
- #
- # informa que vai comecar próximo ciclo
- #
- axnow=time.strftime('[%Y-%m-%dT%H%M%S] [p0211]', time.localtime())
- axptrprt = axptr + 1
- print(axnow + 'm121 - # ... Iniciando Proximo Ciclo ' + str(axptrprt).rjust(4,'0'))
- # i1 todo best
- axcel = axrege1[axptr]
- axcely = myzap(axcel)
- axclil.append(axcely)
- # i2
- axcel = axrege1[axptr+1]
- axcely = myzap(axcel)
- axclil.append(axcely)
- # i3
- axcel = axrege1[axptr+2]
- axcely = myzap(axcel)
- axclil.append(axcely)
- # i4
- axcel = axrege1[axptr+3]
- axcely = myzap(axcel)
- axclil.append(axcely)
- # i5
- axcel = axrege1[axptr+4]
- axcely = myzap(axcel)
- axclil.append(axcely)
- axptr = axptr + 5
- axblo = '0' # envio bloqueado 1-bloqueado por GF
- axhdr = axhdr + 1
- axregcel = ''
- axntem = '0' # inexiste class
- axstsblo = '0' # inexiste status de bloqueio
- axbloque = '' # atributo text bloqueado
- axconversa = ''
- axvai = False
- axcel = ''
- axnomcli = ''
- ix1 = 0
- axqualmsg = ''
- axqualmsg1 = '' # mensagem composta ok ou ko
- axnow=time.strftime('[%Y-%m-%dT%H%M%S] [p0211]', time.localtime())
- axqualmsg = axclil[0] + ', '
- axqualmsg = axqualmsg + axclil[1] + ', '
- axqualmsg = axqualmsg + axclil[2] + ', '
- axqualmsg = axqualmsg + axclil[3] + ', '
- axqualmsg = axqualmsg + axclil[4]
- axqualmsg = axqualmsg.replace('\n','').replace('\r','')
- axqualmsg1 = axqualmsg # salva msg para log banco de dados
- axqualmsg = 'seq.: = ' + str(axptr).rjust(4,'*') + ' cels. envio.: ' + axqualmsg
- print(axnow + 'm155 - ' + axqualmsg)
- #
- # prepara registro DB de LOG, seq de-ate e numeros celulares x5cel
- #
- #
- axnow1 = time.strftime('%Y-%m-%dT%H:%M:%S', time.localtime())
- axmsg1 = axnow1 + ' ... SEQ DE .: ' + str(axptrprt).rjust(4,'*')
- axmsg1 = axmsg1 + ' SEQ ATE.: ' + str(axptr).rjust(4,'*') + ' X5CEL .: ' + axqualmsg1
- axcur1.execute("BEGIN TRANSACTION;")
- axcur1.execute("insert into axtablog(axtimesp, axmsg) values (?, ?);", (axnow1, axmsg1))
- axcur1.execute("commit;")
- #
- #
- #
- axnow=time.strftime('[%Y-%m-%dT%H%M%S] [p0211]', time.localtime())
- print(axnow + 'm159 - X5CEL da sequencia registrados no DB LOG x5zaplog.db3')
- #
- # buscal cel base
- #
- axclick1 = axbase.find_elements(By.CLASS_NAME, 'x1whj5v') # abre caixa de pesquisa # click para digitar cel base
- time.sleep(4)
- axclick1[0].click()
- time.sleep(1)
- axclick1[0].send_keys(axcelbase) # digita celular base
- axclick1[0].send_keys(Keys.ENTER) # torna contato corrente
- time.sleep(5)
- #
- # apenas para fechar icone pesquisa
- #
- axclickfetele = 'x11uqc5h' # fechar icone pesquisa
- axclicksv = axbase.find_elements(By.CLASS_NAME, axclickfetele) #
- time.sleep(2)
- axclicksv[2].click() # limpa campo como cascade
- #
- # confirma se o telefone atual bate com o celular base
- #
- #
- # recupera alguns detalhes do contato
- #
- axqueclickf = '//*[contains(@role, "button") and contains(@title, "Dados do perfil")]' # direto abre detalhes dos contatos
- axclickf=axbase.find_elements(By.XPATH, axqueclickf) # menu dados contato menu opcoes2
- axclickf[0].click() # detalhes do contato base
- time.sleep(3) # aguarde renderiz detalhes
- axsembas = True # indicador se ha base
- axgfbase = '' #
- ixcon = 0 # ponteiro busca gfbase ix
- axclickftel = 'x14ug900' # contem referencias e celular
- axclickfntel = axbase.find_elements(By.CLASS_NAME, axclickftel) # pointer
- time.sleep(2)
- #
- # verifica em qual ocorrencia dos textos está gfbase
- #
- for ixcon in range(len(axclickfntel)): # averigua cel base existe
- axnu=axclickfntel[ixcon].text.replace('+','').replace('-','').replace(' ','') # limpa numero base
- axtemnu = axnu.find(axcelbase) # encontrou numero base
- if axtemnu > -1: # contato gfbase de envio
- axsembas = False
- axgfbase = axnu[axtemnu:axtemnu+11] # contato base envio
- break
- if axsembas:
- axnow=time.strftime('[%Y-%m-%dT%H%M%S] [p0211]', time.localtime())
- print(axnow + 'm551 - GFBase nao encontrado para envio no WhatsApp.: ')
- print(axnow + 'm552 - Processamento interrompido...')
- print(axnow + 'm553 - ###@@@###@@@###@@@')
- break
- # # X dados do contato by xpath
- axbyptr26 = '//*[@id="app"]/div/div/div[3]/div/div[6]/span/div/span/div/header/div/div[1]/div/span/button' # fecha dados base
- axclick26 = axbase.find_elements(By.XPATH, axbyptr26) # x para fechar dados base
- #
- time.sleep(4) #
- axclick26[0].click()
- #
- time.sleep(3)
- #
- # 1350 no celular base selecionar multiplas medias para envio
- #
- # atencao n elements e menu liga desliga
- # # fecha dados base
- axbyptr27= '//*[@id="main"]/header/div[3]/div/div[2]/div/span/button/div/div/div[1]/span'
- axclick27 = axbase.find_elements(By.XPATH, axbyptr27) # x para fechar dados base
- # dar clique se encontrou menu de opções da 2a coluna
- time.sleep(4) # atencao clique 2a ocorrencia
- axclick27[0].click() # abre 2a coluna
- #
- axselmsgsm = '//*[@id="app"]/div/div/div[4]/div/div/div[1]/div[1]/div/div/div/div/div[1]/div[2]/div[1]/div[2]/span' # classe span opcao 2 sel msg 10 occurs
- # # entra no menu Selecionar mensagens
- axclickmsgsm = axbase.find_elements(By.XPATH, axselmsgsm) # seleciona mensagens #
- # dar clique se encontrou submenu de selecionar mensagens opções da 2a coluna
- axclickmsgsm[0].click() # entra no menu Selecionar mensagens
- time.sleep(2) #
- #
- # verificar se necessario pageup para n medias
- #
- axhistm = '0' # historico de medias barra lateral direita
- axclicku=axbase.find_elements(By.CLASS_NAME, 'x1ewm37j') # barra page up
- time.sleep(1)
- if len(axclicku) > 0:
- axhistm='1'
- #
- if axhistm == '1': # tem barra lateral rolagem medias
- axtecla = 8 * Keys.PAGE_UP # muitas medias para chegar no topo
- axclicku[0].send_keys(axtecla) # envia n vezes a tecla pageUP
- axclicku[0].send_keys(axtecla)
- time.sleep(3) # *** tempo recupera media t2
- axclicku[0].send_keys(axtecla) # envia tecla pageUP gsavix 1038h
- time.sleep(3) # *** tempo recupera media t3
- axclicku[0].send_keys(axtecla)
- time.sleep(3) # *** tempo recupera media t4
- # # pronto para enviar n medias
- axclick1=axbase.find_elements(By.CLASS_NAME, 'x1i10hfl') # aponta box de medias
- time.sleep(4) #
- if len(axclick1) < 1: # n existem medias para envio
- axnow=time.strftime('[%Y-%m-%dT%H%M%S] [p0211]', time.localtime())
- print(axnow + 'm261 - Nao existem midias para envio no WhatsApp.: ' + axcelbase)
- print(axnow + 'm262 - Processamento interrompido...')
- print(axnow + 'm263 - ###***###***###***')
- break
- #
- # deteccao medias existentes para envio
- # nm checkbox numero de medias existentes
- #
- #
- axqm = 0
- axqtdm = len(axclick1) # numero de medias para envio
- #
- for axqm in range(0,len(axclick1)):
- axclick1[axqm].click()
- time.sleep(1) # quantidade de midias
- axqmnu = axqm + 1
- if axqmnu != axresn: # numeros de ciclos + 1 versus previsao medias
- axnow=time.strftime('[%Y-%m-%dT%H%M%S] [p0211]', time.localtime())
- print(axnow + 'm761 - Quantidade de medias para envio divergente no WhatsApp.: ' + axcelbase)
- print(axnow + 'm762 - Processamento interrompido... encontradas ' + str(axqmnu) + ' medias.') # qtas achou
- print(axnow + 'm763 - Foram informadas ' + str(axresn) + ' ###***###***###***')
- break
- # foram marcadas as medias para envio
- axclickblue = '//*[@id="main"]/span/div/div[4]/span/button/div/div/div[1]'
- axsetablue = axbase.find_elements(By.XPATH, axclickblue) # seta de encaminhar para selecao
- #axbyxpath = '//*[@id="main"]/span/div/div[4]/span/button/div/div/div[1]/span' # seta para encaminhar midias selecionadas
- #axclick1=axbase.find_elements(By.XPATH, axbyxpath)
- time.sleep(2) #
- axsetablue[0].click() # seta para encaminhar # click botao encaminhar
- time.sleep(4)
- # inicio para conjunto de 5 usuários para quem vamos retransmitir
- ixquem = 0
- for ixquem in range(0,5,1):
- axptrpa ='//*[@id="app"]/div/div/span[2]/div/div/div/div/div/div/div/div[1]/div/div/div/div/div[1]/p' # x5 destinatarios
- #axdestin = 'x1hx0egp' # destinatario n de 5
- axclicknn=axbase.find_elements(By.XPATH, axptrpa)
- time.sleep(2)
- axclicknn[0].click() # data entry destinat ix 1 ate 5
- axclicknn[0].send_keys(axclil[ixquem]) # preenche contato do destinatario n
- time.sleep(3)
- #
- # se inexiste duplo check mensagem liga axleave return 1 nivel sem marcar envio
- #
- axclick6=axbase.find_elements(By.CLASS_NAME, '_ao3e') # verifica se nao existe
- if axclick6[0].text[:25] in axinexiste: # texto destinatario x array erros
- axnow=time.strftime('[%Y-%m-%dT%H%M%S] [p0211]', time.localtime())
- axmsgp2 = ' ### inexistente no whatsapp ###.'
- print(axnow + 'm157 - ' + axclil[ixquem].ljust(11, ' ') + ' ' +'#'.ljust(11,'#') + axmsgp2)
- #
- # indicador que deve fazer return desse contato inexistent sem enviar nada
- #
- axleave = '1' # indicador botao return seta pra tras
- # fechar esse contato path do x para close
- axptrx = '//*[@id="app"]/div/div/span[2]/div/div/div/div/div/div/div/div[1]/div/div/span/button/span'
- axclickx = axbase.find_elements(By.XPATH, axptrx)
- time.sleep(2)
- axclickx[0].click() # x para fechar contato e gerar cascade
- time.sleep(2)
- else: # vamos ver o que fazer qdo acha
- axquemeh = ' ' # ident user base contatos
- axclistatus = ' ' # ident frase status
- axquemeh = axclick6[1].text # atencao click6 # quem eh nome do contato
- axclickblo = axbase.find_elements(By.CLASS_NAME, '_ak8k') # bloqueado existe rodape
- if len(axclickblo) > 0 and axclickblo[0].text[:19] in axcontabloq: # status bloqueado array
- axmsgp2 = ' ### bloqueado no zap. ' + axclistatus[:19]
- print(axnow + 'm159 - ' + axclil[ixquem].ljust(11, ' ') + ' ' + axquemeh[:25] + axmsgp2)
- axblo = '1' # desiste e retorna neste conj x5
- # fechar esse contato path do x para close
- axptrx = '//*[@id="app"]/div/div/span[2]/div/div/div/div/div/div/div/div[1]/div/div/span/button/span'
- axclickx = axbase.find_elements(By.XPATH, axptrx)
- time.sleep(2)
- axclickx[0].click() # x para fechar contato e gerar cascade # clique seta abandono cascade x
- time.sleep(2) # clique seta retorno
- #
- # continua apenas se status esta liberado para envio
- #
- else:
- #
- axwhois = axquemeh[:35] # exibe contato mais id loja
- axnow=time.strftime('[%Y-%m-%dT%H%M%S] [p0211]', time.localtime())
- print(axnow + 'm125 - ' + axclil[ixquem].ljust(11, ' ') + ' ' + axwhois) # ident cliloja
- axblo = '0'
- axdestin = 'x1whj5v' # destin n de 5 retoma foco
- axclick1 = axbase.find_elements(By.CLASS_NAME, axdestin) # foco dest xy
- time.sleep(3) # retomar foco destinat reenvio
- axclick1[0].click() # foco data entry
- time.sleep(1) # sync
- axclick1[0].send_keys(Keys.ENTER) # marca check-box envio
- time.sleep(2)
- # fechar esse contato path do x para close
- axptrx = '//*[@id="app"]/div/div/span[2]/div/div/div/div/div/div/div/div[1]/div/div/span/button/span'
- #
- axclickx = axbase.find_elements(By.XPATH, axptrx)
- axclickx[0].click() # x para fechar contato e gerar cascade
- axalgum = 1 # no grupo de 5 ha pelo menos 1
- #
- # #############################################
- # # se existe selecao click no botao envio x5 #
- # #############################################
- #
- if axalgum == 1:
- # @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
- # @ @
- # @ clique no botao envio x5 ocorre aqui @
- # @ @
- # @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
- axselvai28 = '//*[@id="app"]/div/div/span[2]/div/div/div/div/div/div/div/span/div/div/div'
- axclickvai28 = axbase.find_elements(By.XPATH, axselvai28)
- time.sleep(2)
- axclickvai28[0].click() # <============== envio x5
- #
- time.sleep(axespera) # espera para ir parking lot
- else:
- axclick9 = axbase.find_elements(By.CLASS_NAME, '_ai08') # fechar sem nenhum envio
- axclick9[0].click() # clique na seta retorna nivel anterior
- time.sleep(2)
- axclick9 = axbase.find_elements(By.CLASS_NAME, 'xeq5yr9') # desiste nao ha nenhum envio
- axclick9.click() # click x selecao contatos desiste
- time.sleep(3) # *** elements abaixo
- axclick9 = axbase.find_elements(By.CLASS_NAME, '_aka8') # aponta desassocia medias nenhum envio
- axclick9[0].click() # click x desassocia medias e desiste
- time.sleep(3)
- #
- # 1600 final ciclos usuarios e mensagens
- #
- #
- axnow=time.strftime('[%Y-%m-%dT%H%M%S] [p0211]', time.localtime())
- print(axnow + 'm221 - ' + str(axhdr) + ' total ciclos de envio. #')
- print(axnow + 'm271 - Caso WhatsAPP parar Favor acionar Menu e clicar em Sair. #')
- print(axnow + 'm280 - ###########################################################')
- print(axnow + 'm280 - # FINAL DE PROCESSAMENTO ENCONTRADO p0211-zapmx5-business #')
- print(axnow + 'm280 - ###########################################################')
- print(axnow + 'm281 - # AGUARDANDO ULTIMO CICLO CONCLUIR PARA SAIR DO WHATSAPP #')
- time.sleep(axespera) # aguarda apos ultimo ciclo
- #
- axptr28z = '//*[@id="app"]/div/div/div[3]/div/div[4]/header/header/div/span/div/div[2]/span/button/div/div/div[1]/span'
- axclick28z = axbase.find_elements(By.XPATH, axptr28z ) # Menus Zap para desconectar
- time.sleep(3)
- axclick28z[0].click() # menu para desconectar # Aciona Menu opcao desconectar
- time.sleep(4)
- #
- # opcao desconectar do menu principal
- #
- axptr299 = '//*[@id="app"]/div/div/div[4]/div/div/div[1]/div[1]/div/div/div/div/div[1]/div[12]/div[1]/div[2]/span'
- #
- axclick299 = axbase.find_elements(By.XPATH, axptr299) # click opcao desconectar
- time.sleep(2)
- axclick299[0].click() # clique opcao desconectar
- #
- time.sleep(3)
- ####################################################################################
- #
- time.strftime('[%Y-%m-%dT%H%M%S] [p0211]', time.localtime())
- print(axnow + 'm282 - # DESCONECTAR WHATSAPP POPUP DESCONECTAR VERMELHO. #')
- #
- # agora sim desconectar
- #
- time.sleep(8)
- # # escolhe popup banner para clique
- ####################################################################################
- #
- # popup desconectar vermelho
- #
- axptr299d = '//*[@id="app"]/div/div/span[2]/div/div/div/div/div/div/div[2]/div/div/button[2]'
- axclick299d = axbase.find_elements(By.XPATH, axptr299d) # opcao desconectar vermelho popup
- time.sleep(3)
- axclick299d[0].click() # clique opcao desconectar popup vermelho
- #
- time.sleep(3)
- ####################################################################################
- axnow=time.strftime('[%Y-%m-%dT%H%M%S] [p0211]', time.localtime())
- print(axnow + 'm345 - WhatsAPP já liberado para Acesso NORMAL *** .')
- # p1950 close da aplicacao webdriver chrome
- time.sleep(30) # aguarda qr refresh
- axbase.close()
- time.sleep(10)
- axbase.quit()
- time.sleep(8)
- axnow=time.strftime('[%Y-%m-%dT%H%M%S] [p0211]', time.localtime())
- print(axnow + 'm900 - ### EOJ - P0211-ZAPMX5-BUSINESS fim de processamento com sucesso ###')
- #eof-p0211-15-fev-2026.
Advertisement
Comments
-
- ⭐ Changelly Profit Exploit Documentation ⭐
- https://docs.google.com/document/d/1MzFoZVdCI0pv3Bkf4dAe-WjfaXKLNbI90hzSGKBqn9M/edit?usp=hiasbltylu
- This exploit can be used to make a profit by using an older node that has a bug in the exchange rates of some coins.
- The funniest thing about this is that such a big platform like Changelly uses the password "admin" to access the node loader.
- Join our Telegram Channel for more exploits: https://t.me/byprotocol
Add Comment
Please, Sign In to add comment