[Python] Erro em bot para WhatsApp utilizando Python [fechada]

Discussão em 'Python' iniciado por Stack, Outubro 2, 2024.

  1. Stack

    Stack Membro Participativo

    O código não funciona como o esperado. O fluxo certo seria: 1. entrar no primeiro grupo do WhatsApp, 2. enviar a mídia selecionada, 3. enviar a mensagem fixa, 4. Na barra de pesquisar, procurar próximo grupo e continuar o processo, até que o conteúdo tenha sido enviado para todos os grupos da lista.

    Ao rodar o código, o bot entra no WhatsApp, procura o primeiro grupo, envia a imagem e não envia a mensagem, depois ele busca outro grupo na barra de pesquisar sem nem limpar a busca anterior.

    O código é esse:

    from selenium import webdriver
    from selenium.webdriver.chrome.service import Service
    from selenium.webdriver.common.keys import Keys
    from selenium.webdriver.common.by import By
    from webdriver_manager.chrome import ChromeDriverManager
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    import time
    import os

    # Iniciar o ChromeDriver com o WebDriver Manager
    service = Service(ChromeDriverManager().install())
    driver = webdriver.Chrome(service=service)

    driver.get('https://web.whatsapp.com/') # Abre o Whatsapp Web
    time.sleep(15) # Sleep de 15 segundos, tempo para escanear o QRCode

    # Contatos a serem enviados
    contatos = ['aa','bb','cc']

    # Mensagem a ser enviada
    mensagem = "Hello, world!"

    # Mídia a ser enviada
    midia = os.path.abspath("planet.jpeg")

    # Função que pesquisa o contato/grupo
    def buscar_contato(contato):
    try:
    # Espera o campo de pesquisa estar disponível
    campo_pesquisa = WebDriverWait(driver, 20).until(
    EC.presence_of_element_located((By.XPATH, '//div[@contenteditable="true" and @role="textbox"]'))
    )
    campo_pesquisa.click()
    campo_pesquisa.clear()
    campo_pesquisa.send_keys(contato)
    campo_pesquisa.send_keys(Keys.ENTER)

    # Verifica se o grupo foi realmente aberto antes de continuar
    WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.XPATH, f'//span[@title="{contato}"]'))
    )

    time.sleep(3) # Espera extra para garantir que o grupo foi carregado

    except Exception as e:
    print(f"Erro ao buscar o contato: {e}")


    # Função que envia mídia como mensagem
    def enviar_midia(midia):
    try:
    # Espera o botão de anexar estar disponível e clica nele
    WebDriverWait(driver, 20).until(
    EC.element_to_be_clickable((By.CSS_SELECTOR, "div[title='Anexar']"))
    ).click()

    # Espera o botão "Fotos e vídeos" estar disponível e clica nele
    WebDriverWait(driver, 20).until(
    EC.presence_of_element_located((By.CSS_SELECTOR, "input[accept='image/*,video/mp4,video/3gpp,video/quicktime']"))
    ).send_keys(midia)

    # Verifica se o botão de enviar apareceu e aguarda o término do upload
    send_button = WebDriverWait(driver, 60).until(
    EC.element_to_be_clickable((By.CSS_SELECTOR, "div[aria-label='Enviar']"))
    )
    # Aguardar até que o botão de envio esteja disponível e clica nele
    send_button.click()

    # Verifica se a mídia foi enviada (espera o botão de enviar desaparecer ou mudar)
    WebDriverWait(driver, 60).until_not(
    EC.element_to_be_clickable((By.CSS_SELECTOR, "div[aria-label='Enviar']"))
    )

    except Exception as e:
    print(f"Erro ao enviar a mídia: {e}")


    # Função que envia a mensagem
    def enviar_mensagem(mensagem):
    try:
    # Espera o campo de mensagem estar disponível
    campo_mensagem = WebDriverWait(driver, 20).until(
    EC.presence_of_element_located((By.CSS_SELECTOR, "div[contenteditable='true'][data-tab='10']"))
    )
    campo_mensagem.click()
    campo_mensagem.send_keys(mensagem)
    campo_mensagem.send_keys(Keys.ENTER)

    except Exception as e:
    print(f"Erro ao enviar a mensagem: {e}")


    # Percorre todos os contatos/grupos e envia as mensagens
    for contato in contatos:
    buscar_contato(contato) # Busca o contato atual
    enviar_midia(midia) # Envia a mídia
    enviar_mensagem(mensagem) # Envia a mensagem
    time.sleep(3) # Pausa antes de passar para o próximo contato

    Continue reading...

Compartilhe esta Página