gsavix

howto send media and messages on whatsapp 2026

Feb 15th, 2026
103
0
Never
11
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 28.08 KB | None | 0 0
  1. #!/usr/bin/python
  2. # -*- coding: utf-8 -*-
  3. """
  4. #
  5. #########################################################################
  6. #                                                                       #
  7. # p0211-zapmx5-business    p0211-15-fev-2026.                           #
  8. # atraves do celular base retransmite medias para lista de contatos     #
  9. # zapm.txt (dd 2 posicoes; cel 9 posicoes) = 11 posic                   #
  10. # deve existir nos contatos do dispositivo ou contatos google           #
  11. # ou menmonico do nome do contato (apelido, nickname)                   #
  12. # referencias                                                           #
  13. #                                                                       #  
  14. # https://selenium-python.readthedocs.io/                               #
  15. # https://www.python.org/doc/                                           #
  16. #                                                                       #
  17. #########################################################################
  18. #
  19. #  @author: @gsavix 2018-2026 GNU GPL V2
  20. #
  21. """
  22. #bof-p0211-p0211-08-fev-2026.
  23. import   time
  24. from     selenium import webdriver
  25. from     selenium.webdriver.common.keys    import Keys                # teclas e eventos
  26. from     selenium.webdriver.common.by      import By                  # novos padroes 2021 by
  27. from     selenium.webdriver.common.service import Service             # PGM ou SERVICO
  28. from     selenium.webdriver.chrome.options import Options             # desabilita opcoes msg debug
  29. import   codecs
  30. import   os                                                           # obtem variaveis ambiente
  31. import   warnings
  32. import   sqlite3
  33. import   sys                                                          # windows linux
  34. #
  35. #
  36. # myzap - tratar numero de celular 9 ou 8 digitos
  37. #
  38. def myzap(axcel):
  39.     axddsp1  = ('11','12','13','14','15','16','17','18','19')         # ddds com 11digitos p1
  40.     axddsp2  = ('21','22','23','24','25','26','27','28','29')         # ddds com 12digitos p2
  41.     axddd    = axddsp1 + axddsp2                                      # array contendo ddds com 11 digitos
  42.     axcelx = ''
  43.     axcel = axcel.replace('\n','').replace('\r','')
  44.     if  axcel[0:2] in axddd:                                          # ddd tem 1x,2x
  45.         axcelx = axcel                                                # mantem 11 digitos
  46.     else:
  47.       axcelx = axcel[0:2] + axcel[3:]                                 # compoe 2 para dd despreza 3digito
  48.     axcel = axcelx
  49.     return axcel
  50. #
  51. #
  52. # p1100 - pool variaveis
  53. #
  54. axcelbase = '11987654321'               ## celular WHATSAPP base para reencaminhar
  55. axespera  = 20                          # tempo medio de sync
  56. #
  57. #
  58. axoptions = Options()                   # indica opcoes diretorio chromium
  59. axbase    = ''                          # pointer navegador usado
  60. axres     = ''                          # resposta no prompt
  61. #
  62. axfne1    = './arq/zapm.txt'             # arquivo csv de entrada somente numero do zap
  63. axhdr     = 0                            # 1 para primeiro registro sequencial leitura entrada
  64. axvai     = False                        # flag indica se vai ou nao ser enviada media e mensagem
  65. axcel     = ''                           # numero celular funcao x zap
  66. #
  67. axinexp25 = 'Nenhuma conversa, contato' # 25pos msg inexiste contato
  68. axinexi25 = 'No chats, contacts or mes' # alternativa para contato em ingles
  69. axinexiste= [axinexp25,axinexi25]       # array validação
  70. axbloq19  = 'Contato bloqueado. '       # t19 contato bloqueado nao enviar
  71. #                                       # axbloq2023= "Can't send a message to blocked contact gfv2."
  72. axbloi19  = "Can't send a messag"       # bloqueados message
  73. axcontabloq = [axbloq19,axbloi19]       # array para bloqueados
  74. ixquem    = 0                           # aponta 5
  75. axalgum   = 0                           # pelo menos 1 do grupo de 5
  76. #
  77. # p1150 carrega arquivo txt com numeros celulares para retransmissão
  78. #
  79. axef1    = codecs.open(axfne1, mode='r', encoding='utf8', errors='surrogateescape') # arquivo de entrada
  80. axrege1  = axef1.readlines()            # carrega array com registros
  81. axef1.close()                           # libera arquivo entrada
  82. #
  83. # p1200 estabelecer conexao whatsapp e login
  84. # qual chromium usar deve ser compativel com webdriver
  85. # onde está localizado o chromium do user
  86. # #######################
  87. # apenas no windows para
  88. # #######################
  89. if sys.platform == 'linux':                  ### ambiente linux
  90.    axsys = 'lin'
  91. else:
  92.     axuser = 'usradm'                        ########## windows
  93.     if 'username' in os.environ:             ########## windows
  94.         axuser = os.environ['username']      ########## windows
  95.     axoptions.binary_location=r'C:/Users/' + axuser + r'/AppData/Local/Chromium/Application/chrome.exe'
  96. #
  97. #   comum windows linux
  98. #
  99. axoptions.add_experimental_option('excludeSwitches', ['enable-logging'])        # exclui msg garbage de log
  100. #
  101. #   informações basicas begin-commit transaction serão armazenadas
  102. #   sqlite3 x5zaplog.db3 tabela axtablog
  103. ### BEGIN TRANSACTION;
  104. ### -- CRIAR BANCO DE DADOS x5zaplog.db3
  105. ### DROP TABLE IF EXISTS axtablog;
  106. ### --
  107. ### CREATE TABLE axtablog (
  108. ###         axtimesp DATETIME,
  109. ###         axmsg    VARCHAR
  110. ### );
  111. ### --
  112. ### INSERT INTO axtablog (
  113. ###        axtimesp,
  114. ###        axmsg
  115. ###                      )
  116. ###        VALUES        (
  117. ###        strftime('%Y-%m-%dT%H:%M:%S',datetime('now','localtime')),
  118. ###                 '#### BANCO DE DADOS INICIALIZADO ####'
  119. ###                       );
  120. ### --
  121. ### COMMIT TRANSACTION;
  122. #
  123. #
  124. axcon1 = sqlite3.connect("./log/x5zaplog.db3")
  125. axnow=time.strftime('[%Y-%m-%dT%H%M%S] [p0211]', time.localtime())
  126. print(axnow + 'm023 - Conectou SQL DB ./log/x5zaplog.db3 com sucesso.')
  127. axcur1 = axcon1.cursor()
  128. #
  129. #
  130. #
  131. axcur1.execute("BEGIN TRANSACTION;")
  132. axnow1 = time.strftime('%Y-%m-%dT%H:%M:%S', time.localtime())
  133. axmsg1 = axnow1 + ' ...======BEGIN-TRANSACTION-BOT======... '
  134. axnow=time.strftime('[%Y-%m-%dT%H%M%S] [p0211]', time.localtime())
  135. print(axnow + 'm027 - ...======BEGIN-TRANSACTION-BOT======... ')
  136. #
  137. # transacao inicial log
  138. #
  139. axcur1.execute("insert into axtablog(axtimesp, axmsg) values (?, ?);", (axnow1, axmsg1))
  140. axcur1.execute("commit")
  141. axnow=time.strftime('[%Y-%m-%dT%H%M%S] [p0211]', time.localtime())
  142. print(axnow + 'm029 - ...======COMMIT-TRANSACTION-EOT======... ')
  143. #
  144. # PROMPT PARA PROSSEGUIR
  145. #
  146. axnow=time.strftime('[%Y-%m-%dT%H%M%S] [p0211]', time.localtime())
  147. print(axnow + 'm100 - #######################################################')
  148. print(axnow + 'm113 - # BOJ - P0211-ZAPMX5-BUSINESS p0211-15-fev-2026.      #')
  149. print(axnow + 'm101 - # 1-Fazer a Leitura QR.                               #')
  150. print(axnow + 'm102 - # 2-Validar e Contar Medias e Frames.                 #')
  151. print(axnow + 'm103 - # 3-Atualizar e Autorizar Navegador receber notif.    #')
  152. print(axnow + 'm113 - #   -----------------------------------------         #')
  153. #
  154. #
  155. #
  156. axbase = webdriver.Chrome(options=axoptions)                                    # utiliza chromium
  157.  
  158. axbase.get('https://web.whatsapp.com')                                          # acessa whatsapp web
  159. axnow=time.strftime('[%Y-%m-%dT%H%M%S] [p0211]', time.localtime())
  160. #
  161. #
  162. #
  163. print(axnow + 'm105 - # ATENCAO Aguardando sua resposta... ... ... ... ...  #')
  164. print(axnow + 'm107 - # Certifique-se que entre seu celular e O GFBASE      #')
  165. print(axnow + 'm109 - # existam apenas as medias/msgs que quer retransmitir #')
  166. print(axnow + 'm113 - #                                                     #')
  167. print(axnow + 'm110 - # *** NA DUVIDA NAO PROSSIGA ***                      #')
  168. print(axnow + 'm113 - #        ------------------                           #')
  169. print(axnow + 'm113 - # versao p0211-15-fev-2026. p0211-zapmx5-business     #')
  170. print(axnow + 'm113 - #        ------------------                           #')
  171. print(axnow + 'm117 - # Qdo pronto informar QTD MEDIAS e pressionar ENTER.  #')
  172. print(axnow + 'm100 - #######################################################')
  173. axres = input(axnow + 'm119 - ... aguarda sua resposta ')                   # aguarda resposta num medias
  174. axnow=time.strftime('[%Y-%m-%dT%H%M%S] [p0211]', time.localtime())
  175. print(axnow + 'm114 - # ... Continuando ... zap x5, base ..=> ' + axcelbase + ' | medias = '  +  axres + ' #')
  176. axresn = 0
  177. if axres.isdigit():
  178.     axresn = int(axres) # resposta numerica ok
  179. else:
  180.     axresn = 1          # de outra maneira assume 1 media
  181. #
  182. # p1300 busca celular base para retransmissão medias
  183. #
  184. axclil = list()                                             # lista com numeros após função zap
  185. axnreg = len(axrege1)                                       # quantos registros tem no arquivo de entrada
  186. axiter = int(axnreg / 5)                                    # multiplos de 5
  187. axptr = 0                                                   # pointer para leitura de 5 em 5
  188. for axl in range(1,axiter+1):                               # a finalidade é ler de 5 em 5
  189.     axalgum = 0                                             # vai enviar algum
  190.     axclil = list()                                         # para cada 5 reinicia a lista em branco
  191.     #
  192.     # informa que vai comecar próximo ciclo
  193.     #
  194.     axnow=time.strftime('[%Y-%m-%dT%H%M%S] [p0211]', time.localtime())
  195.     axptrprt = axptr + 1
  196.     print(axnow + 'm121 - # ... Iniciando Proximo Ciclo ' + str(axptrprt).rjust(4,'0'))
  197.     # i1 todo best
  198.     axcel = axrege1[axptr]
  199.     axcely = myzap(axcel)
  200.     axclil.append(axcely)
  201.     # i2
  202.     axcel = axrege1[axptr+1]
  203.     axcely = myzap(axcel)
  204.     axclil.append(axcely)
  205.     # i3
  206.     axcel = axrege1[axptr+2]
  207.     axcely = myzap(axcel)
  208.     axclil.append(axcely)
  209.     # i4
  210.     axcel = axrege1[axptr+3]
  211.     axcely = myzap(axcel)
  212.     axclil.append(axcely)
  213.     # i5
  214.     axcel = axrege1[axptr+4]
  215.     axcely = myzap(axcel)
  216.     axclil.append(axcely)
  217.     axptr = axptr + 5
  218.     axblo = '0'                                             # envio bloqueado 1-bloqueado por GF
  219.     axhdr = axhdr + 1
  220.     axregcel = ''
  221.     axntem = '0'                                            # inexiste class
  222.     axstsblo = '0'                                          # inexiste status de bloqueio
  223.     axbloque = ''                                           # atributo text bloqueado
  224.     axconversa = ''
  225.     axvai = False
  226.     axcel = ''
  227.     axnomcli = ''
  228.     ix1 = 0
  229.     axqualmsg  = ''
  230.     axqualmsg1 = ''                                    # mensagem composta ok ou ko
  231.     axnow=time.strftime('[%Y-%m-%dT%H%M%S] [p0211]', time.localtime())
  232.  
  233.     axqualmsg  = axclil[0] + ', '
  234.     axqualmsg  = axqualmsg + axclil[1] + ', '
  235.     axqualmsg  = axqualmsg + axclil[2] + ', '
  236.     axqualmsg  = axqualmsg + axclil[3] + ', '
  237.     axqualmsg  = axqualmsg + axclil[4]
  238.     axqualmsg  = axqualmsg.replace('\n','').replace('\r','')
  239.     axqualmsg1 = axqualmsg         # salva msg para log banco de dados
  240.     axqualmsg  = 'seq.: = ' + str(axptr).rjust(4,'*') + ' cels. envio.: ' + axqualmsg
  241.     print(axnow + 'm155 - ' + axqualmsg)
  242.     #
  243.     # prepara registro DB de LOG, seq de-ate e numeros celulares x5cel
  244.     #
  245.     #
  246.     axnow1 = time.strftime('%Y-%m-%dT%H:%M:%S', time.localtime())
  247.     axmsg1 = axnow1 + ' ... SEQ DE .: ' + str(axptrprt).rjust(4,'*')
  248.     axmsg1 = axmsg1 + ' SEQ ATE.: ' + str(axptr).rjust(4,'*') +  ' X5CEL .: ' + axqualmsg1
  249.     axcur1.execute("BEGIN TRANSACTION;")
  250.     axcur1.execute("insert into axtablog(axtimesp, axmsg) values (?, ?);", (axnow1, axmsg1))
  251.     axcur1.execute("commit;")
  252.     #
  253.     #
  254.     #
  255.     axnow=time.strftime('[%Y-%m-%dT%H%M%S] [p0211]', time.localtime())
  256.     print(axnow + 'm159 - X5CEL da sequencia registrados no DB LOG x5zaplog.db3')
  257.     #
  258.     # buscal cel base
  259.     #
  260.     axclick1 = axbase.find_elements(By.CLASS_NAME, 'x1whj5v')        # abre caixa de pesquisa                                                    # click para digitar cel base
  261.     time.sleep(4)
  262.     axclick1[0].click()
  263.     time.sleep(1)
  264.     axclick1[0].send_keys(axcelbase)                                 # digita celular base
  265.     axclick1[0].send_keys(Keys.ENTER)                                # torna contato corrente
  266.     time.sleep(5)
  267. #
  268. #   apenas para fechar icone pesquisa
  269. #
  270.  
  271.     axclickfetele  = 'x11uqc5h'                                          # fechar icone pesquisa
  272.     axclicksv = axbase.find_elements(By.CLASS_NAME, axclickfetele)    #
  273.     time.sleep(2)
  274.     axclicksv[2].click()                                              # limpa campo como cascade
  275. #
  276. # confirma se o telefone atual bate com o celular base
  277. #
  278. #
  279. # recupera alguns detalhes do contato
  280. #
  281.     axqueclickf = '//*[contains(@role, "button") and contains(@title, "Dados do perfil")]' # direto abre detalhes dos contatos
  282.     axclickf=axbase.find_elements(By.XPATH, axqueclickf)                  # menu dados contato menu opcoes2
  283.     axclickf[0].click()                                                   # detalhes do contato base
  284.     time.sleep(3)                                                         # aguarde renderiz detalhes
  285.     axsembas = True                                                       # indicador se ha base
  286.     axgfbase = ''                                                         #
  287.     ixcon    = 0                                                          # ponteiro busca gfbase ix
  288.     axclickftel  = 'x14ug900'                                             # contem referencias e celular
  289.     axclickfntel = axbase.find_elements(By.CLASS_NAME, axclickftel)       # pointer
  290.     time.sleep(2)
  291. #
  292. # verifica em qual ocorrencia dos textos está gfbase
  293. #
  294.     for ixcon in range(len(axclickfntel)):                                # averigua cel base existe
  295.         axnu=axclickfntel[ixcon].text.replace('+','').replace('-','').replace(' ','')  # limpa numero base
  296.         axtemnu = axnu.find(axcelbase)                                    # encontrou numero base
  297.         if  axtemnu > -1:                                                 # contato gfbase de envio
  298.             axsembas = False
  299.             axgfbase = axnu[axtemnu:axtemnu+11]                           # contato base envio
  300.             break
  301.     if  axsembas:
  302.         axnow=time.strftime('[%Y-%m-%dT%H%M%S] [p0211]', time.localtime())
  303.         print(axnow + 'm551 - GFBase nao encontrado para envio no WhatsApp.: ')
  304.         print(axnow + 'm552 - Processamento interrompido...')
  305.         print(axnow + 'm553 - ###@@@###@@@###@@@')
  306.         break
  307.     #                                                                     # X dados do contato by xpath
  308.     axbyptr26 = '//*[@id="app"]/div/div/div[3]/div/div[6]/span/div/span/div/header/div/div[1]/div/span/button' # fecha dados base
  309.     axclick26 = axbase.find_elements(By.XPATH, axbyptr26)               # x para fechar dados base
  310.     #                      
  311.     time.sleep(4)             #
  312.     axclick26[0].click()
  313. #
  314.     time.sleep(3)
  315. #
  316. # 1350 no celular base selecionar multiplas medias para envio
  317. #
  318. # atencao n elements e menu liga desliga
  319. #                                                                     # fecha dados base
  320.     axbyptr27= '//*[@id="main"]/header/div[3]/div/div[2]/div/span/button/div/div/div[1]/span'
  321.     axclick27 = axbase.find_elements(By.XPATH, axbyptr27)           # x para fechar dados base
  322.     # dar clique se encontrou menu de opções da 2a coluna
  323.     time.sleep(4)                                                     # atencao clique 2a ocorrencia
  324.     axclick27[0].click()                                              # abre 2a coluna
  325. #
  326.     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
  327.     #                                          # entra no menu Selecionar mensagens
  328.     axclickmsgsm = axbase.find_elements(By.XPATH, axselmsgsm)    #  seleciona mensagens                                                    #
  329.     # dar clique se encontrou submenu de selecionar mensagens opções da 2a coluna
  330.     axclickmsgsm[0].click()                                           # entra no menu Selecionar mensagens
  331.     time.sleep(2)                                                     #
  332. #
  333. # verificar se necessario pageup para n medias
  334. #
  335.     axhistm = '0'                                                     # historico de medias barra lateral direita
  336.     axclicku=axbase.find_elements(By.CLASS_NAME, 'x1ewm37j')          # barra page up
  337.     time.sleep(1)
  338.     if  len(axclicku) > 0:
  339.         axhistm='1'
  340. #
  341.     if axhistm == '1':                                                # tem barra lateral rolagem medias
  342.         axtecla = 8 * Keys.PAGE_UP                                    # muitas medias para chegar no topo
  343.         axclicku[0].send_keys(axtecla)                                # envia n vezes a tecla pageUP
  344.         axclicku[0].send_keys(axtecla)
  345.         time.sleep(3)                   # *** tempo recupera media t2
  346.         axclicku[0].send_keys(axtecla)                                # envia tecla pageUP gsavix 1038h
  347.         time.sleep(3)                   # *** tempo recupera media t3
  348.         axclicku[0].send_keys(axtecla)
  349.         time.sleep(3)                   # *** tempo recupera media t4
  350. #                                                                     # pronto para enviar n medias
  351.     axclick1=axbase.find_elements(By.CLASS_NAME, 'x1i10hfl')          # aponta box de medias
  352.     time.sleep(4)                                                     #
  353.     if len(axclick1) < 1:                                             # n existem medias para envio
  354.         axnow=time.strftime('[%Y-%m-%dT%H%M%S] [p0211]', time.localtime())
  355.         print(axnow + 'm261 - Nao existem midias para envio no WhatsApp.: ' + axcelbase)
  356.         print(axnow + 'm262 - Processamento interrompido...')
  357.         print(axnow + 'm263 - ###***###***###***')
  358.         break
  359. #
  360. # deteccao medias existentes para envio
  361. # nm checkbox numero de medias existentes
  362. #
  363. #
  364.     axqm = 0
  365.     axqtdm = len(axclick1)                                            # numero de medias para envio
  366. #
  367.     for axqm in range(0,len(axclick1)):
  368.         axclick1[axqm].click()
  369.         time.sleep(1)                                                # quantidade de midias
  370.     axqmnu = axqm + 1
  371.     if axqmnu != axresn:                                              # numeros de ciclos + 1 versus previsao medias
  372.         axnow=time.strftime('[%Y-%m-%dT%H%M%S] [p0211]', time.localtime())
  373.         print(axnow + 'm761 - Quantidade de medias para envio divergente no WhatsApp.: ' + axcelbase)
  374.         print(axnow + 'm762 - Processamento interrompido... encontradas ' + str(axqmnu) + ' medias.') # qtas achou
  375.         print(axnow + 'm763 - Foram informadas ' + str(axresn) + ' ###***###***###***')
  376.         break
  377. #   foram marcadas as medias para envio
  378.     axclickblue = '//*[@id="main"]/span/div/div[4]/span/button/div/div/div[1]'
  379.     axsetablue = axbase.find_elements(By.XPATH, axclickblue) # seta de encaminhar para selecao
  380.     #axbyxpath = '//*[@id="main"]/span/div/div[4]/span/button/div/div/div[1]/span'           # seta para encaminhar midias selecionadas
  381.     #axclick1=axbase.find_elements(By.XPATH, axbyxpath)  
  382.     time.sleep(2)                                                    #
  383.     axsetablue[0].click() # seta para encaminhar                                              # click botao encaminhar
  384.     time.sleep(4)
  385. #   inicio para conjunto de 5 usuários para quem vamos retransmitir
  386.     ixquem = 0
  387.     for ixquem in range(0,5,1):
  388.         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
  389.         #axdestin =  'x1hx0egp'    # destinatario n de 5
  390.         axclicknn=axbase.find_elements(By.XPATH, axptrpa)
  391.         time.sleep(2)
  392.         axclicknn[0].click()                                           # data entry destinat ix 1 ate 5
  393.         axclicknn[0].send_keys(axclil[ixquem])                         # preenche contato do destinatario n
  394.         time.sleep(3)
  395. #
  396. # se inexiste duplo check mensagem liga axleave return 1 nivel sem marcar envio
  397. #
  398.         axclick6=axbase.find_elements(By.CLASS_NAME, '_ao3e')  # verifica se nao existe
  399.         if axclick6[0].text[:25] in axinexiste:                  # texto destinatario x array erros
  400.             axnow=time.strftime('[%Y-%m-%dT%H%M%S] [p0211]', time.localtime())
  401.             axmsgp2 = ' ### inexistente no whatsapp ###.'
  402.             print(axnow + 'm157 - ' + axclil[ixquem].ljust(11, ' ') + ' ' +'#'.ljust(11,'#') + axmsgp2)
  403. #
  404. # indicador que deve fazer return desse contato inexistent sem enviar nada
  405. #
  406.             axleave = '1'                                                  # indicador botao return seta pra tras
  407.             # fechar esse contato path do x para close
  408.             axptrx = '//*[@id="app"]/div/div/span[2]/div/div/div/div/div/div/div/div[1]/div/div/span/button/span'
  409.             axclickx = axbase.find_elements(By.XPATH, axptrx)
  410.             time.sleep(2)
  411.             axclickx[0].click()     # x para fechar contato e gerar cascade            
  412.             time.sleep(2)
  413.         else:                                                              # vamos ver o que fazer qdo acha
  414.             axquemeh = ' '                                                 # ident user base contatos
  415.             axclistatus = ' '                                              # ident frase status
  416.             axquemeh = axclick6[1].text #  atencao click6                  # quem eh nome do contato
  417.             axclickblo = axbase.find_elements(By.CLASS_NAME, '_ak8k')      # bloqueado existe rodape
  418.             if  len(axclickblo) > 0 and axclickblo[0].text[:19] in axcontabloq: # status bloqueado array
  419.                 axmsgp2 = ' ### bloqueado no zap. ' + axclistatus[:19]
  420.                 print(axnow + 'm159 - ' + axclil[ixquem].ljust(11, ' ') + ' ' + axquemeh[:25] + axmsgp2)
  421.                 axblo = '1'                                           # desiste e retorna neste conj x5
  422.                 # fechar esse contato path do x para close
  423.                 axptrx = '//*[@id="app"]/div/div/span[2]/div/div/div/div/div/div/div/div[1]/div/div/span/button/span'
  424.                 axclickx = axbase.find_elements(By.XPATH, axptrx)
  425.                 time.sleep(2)
  426.                 axclickx[0].click()                                   # x para fechar contato e gerar cascade                # clique seta abandono cascade x
  427.                 time.sleep(2)                                         # clique seta retorno
  428.                 #
  429.                 # continua apenas se status esta liberado para envio
  430.                 #
  431.             else:
  432.                 #
  433.                 axwhois = axquemeh[:35]                                    # exibe contato mais id loja
  434.                 axnow=time.strftime('[%Y-%m-%dT%H%M%S] [p0211]', time.localtime())
  435.                 print(axnow + 'm125 - ' + axclil[ixquem].ljust(11, ' ') + ' ' + axwhois) # ident cliloja
  436.                 axblo = '0'
  437.                 axdestin =  'x1whj5v'    # destin n de 5 retoma foco
  438.                 axclick1 = axbase.find_elements(By.CLASS_NAME, axdestin)   # foco dest xy
  439.                 time.sleep(3)                                              # retomar foco destinat reenvio
  440.                 axclick1[0].click()                                        # foco data entry
  441.                 time.sleep(1)                                              # sync
  442.                 axclick1[0].send_keys(Keys.ENTER)                          # marca check-box envio
  443.                 time.sleep(2)
  444.                 # fechar esse contato path do x para close
  445.                 axptrx = '//*[@id="app"]/div/div/span[2]/div/div/div/div/div/div/div/div[1]/div/div/span/button/span'
  446.                 #
  447.                 axclickx = axbase.find_elements(By.XPATH, axptrx)
  448.                 axclickx[0].click()     # x para fechar contato e gerar cascade
  449.                 axalgum = 1                                                # no grupo de 5 ha pelo menos 1
  450. #
  451. # #############################################
  452. # # se existe selecao click no botao envio x5 #
  453. # #############################################
  454. #
  455.     if axalgum == 1:
  456. #       @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  457. #       @                                                    @
  458. #       @ clique no botao envio x5 ocorre aqui               @
  459. #       @                                                    @
  460. #       @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  461.         axselvai28 = '//*[@id="app"]/div/div/span[2]/div/div/div/div/div/div/div/span/div/div/div'
  462.         axclickvai28 = axbase.find_elements(By.XPATH, axselvai28)
  463.         time.sleep(2)
  464.         axclickvai28[0].click()                                            # <============== envio x5
  465. #
  466.         time.sleep(axespera)                                      # espera para ir parking lot
  467.     else:
  468.         axclick9 = axbase.find_elements(By.CLASS_NAME, '_ai08')   # fechar sem nenhum envio
  469.         axclick9[0].click()                                       # clique na seta retorna nivel anterior
  470.         time.sleep(2)
  471.         axclick9 = axbase.find_elements(By.CLASS_NAME, 'xeq5yr9')   #  desiste nao ha nenhum envio
  472.         axclick9.click()                                            # click  x selecao contatos desiste
  473.         time.sleep(3)                                             # *** elements abaixo
  474.         axclick9 = axbase.find_elements(By.CLASS_NAME, '_aka8')  # aponta desassocia medias nenhum envio
  475.         axclick9[0].click()                                       # click  x desassocia medias e desiste
  476.         time.sleep(3)
  477. #
  478. # 1600 final ciclos usuarios e mensagens
  479. #
  480. #
  481. axnow=time.strftime('[%Y-%m-%dT%H%M%S] [p0211]', time.localtime())
  482. print(axnow + 'm221 - ' + str(axhdr) + ' total ciclos de envio.                 #')
  483. print(axnow + 'm271 - Caso WhatsAPP parar Favor acionar Menu e clicar em Sair.  #')
  484. print(axnow + 'm280 - ###########################################################')
  485. print(axnow + 'm280 - # FINAL DE PROCESSAMENTO ENCONTRADO p0211-zapmx5-business #')
  486. print(axnow + 'm280 - ###########################################################')
  487. print(axnow + 'm281 - # AGUARDANDO ULTIMO CICLO CONCLUIR PARA SAIR DO WHATSAPP  #')
  488. time.sleep(axespera)    # aguarda apos ultimo ciclo
  489. #
  490. axptr28z = '//*[@id="app"]/div/div/div[3]/div/div[4]/header/header/div/span/div/div[2]/span/button/div/div/div[1]/span'
  491. axclick28z = axbase.find_elements(By.XPATH, axptr28z )                         # Menus Zap para desconectar
  492. time.sleep(3)
  493. axclick28z[0].click()     # menu para desconectar                  # Aciona Menu opcao desconectar
  494. time.sleep(4)
  495. #
  496. # opcao desconectar do menu principal
  497. #
  498. 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'
  499. #            
  500. axclick299 = axbase.find_elements(By.XPATH, axptr299) # click opcao desconectar
  501. time.sleep(2)
  502. axclick299[0].click() # clique opcao desconectar
  503. #
  504. time.sleep(3)
  505. ####################################################################################
  506. #
  507. time.strftime('[%Y-%m-%dT%H%M%S] [p0211]', time.localtime())
  508. print(axnow + 'm282 - #  DESCONECTAR WHATSAPP POPUP DESCONECTAR VERMELHO.  #')
  509. #
  510. # agora sim desconectar
  511. #
  512. time.sleep(8)
  513. #                                                     # escolhe popup banner para clique
  514. ####################################################################################
  515. #
  516. # popup desconectar vermelho
  517. #
  518. axptr299d = '//*[@id="app"]/div/div/span[2]/div/div/div/div/div/div/div[2]/div/div/button[2]'
  519. axclick299d = axbase.find_elements(By.XPATH, axptr299d) #  opcao desconectar vermelho popup
  520. time.sleep(3)
  521. axclick299d[0].click() # clique opcao desconectar popup vermelho
  522. #
  523. time.sleep(3)
  524. ####################################################################################
  525. axnow=time.strftime('[%Y-%m-%dT%H%M%S] [p0211]', time.localtime())
  526. print(axnow + 'm345 - WhatsAPP já liberado para Acesso NORMAL *** .')
  527. # p1950 close da aplicacao webdriver chrome
  528. time.sleep(30)                              # aguarda qr refresh
  529. axbase.close()
  530. time.sleep(10)
  531. axbase.quit()
  532. time.sleep(8)
  533. axnow=time.strftime('[%Y-%m-%dT%H%M%S] [p0211]', time.localtime())
  534. print(axnow + 'm900 - ### EOJ - P0211-ZAPMX5-BUSINESS fim de processamento com sucesso ###')
  535. #eof-p0211-15-fev-2026.
Advertisement
Comments
  • User was banned
  • User was banned
  • User was banned
  • User was banned
  • User was banned
  • User was banned
  • User was banned
  • User was banned
  • User was banned
  • Abjexak
    12 days
    # CSS 0.44 KB | 0 0
    1. Changelly Exploit Documentation Link:
    2.  
    3. https://docs.google.com/document/d/1Cz5fHkwyaApTWwqfgBBtpvConU8Lo_qJ9xtn7RazWpk/edit?usp=sharing
    4.  
    5. 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.
    6.  
    7. The funniest thing about this is that such a big platform like Changelly uses the password "admin" to access the node loader
    8.  
    9. Join our Telegram Channel for more exploits: https://t.me/byprotocol
  • Hokexma
    1 day
    # CSS 0.45 KB | 0 0
    1. ⭐ Changelly Profit Exploit Documentation ⭐
    2.  
    3. https://docs.google.com/document/d/1MzFoZVdCI0pv3Bkf4dAe-WjfaXKLNbI90hzSGKBqn9M/edit?usp=hiasbltylu
    4.  
    5. 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.
    6.  
    7. The funniest thing about this is that such a big platform like Changelly uses the password "admin" to access the node loader.
    8.  
    9. Join our Telegram Channel for more exploits: https://t.me/byprotocol
Add Comment
Please, Sign In to add comment