web-dev-qa-db-fra.com

WhatsApp Automated Bot ne peut pas rechercher dans la liste de contacts WhatsApp

J'essaie d'implémenter un bot WhatsApp, qui utilise la variable chromedriver, ouvre WhatsApp Web et envoie des messages aux contacts. Ce sont les étapes du programme:

  • Lit les contacts depuis un fichier Excel
  • Définissez l'heure à laquelle vous souhaitez envoyer le message avec le message que vous souhaitez envoyer
  • Rechercher ce nom et envoyer un message

Voici les problèmes que je suis incapable de résoudre:

  1. Si le nom n'y figure pas dans les discussions récentes, il n'est pas en mesure de le rechercher à partir de la liste de contacts WhatsApp et d'envoyer
  2. Aussi, je veux savoir comment envoyer des images et des vidéos

Comme le code est assez long, voici le lien qui y mène: https://github.com/harshitsidhwa/WhatsApp-bot-Selenium

7
skkrish

Python envoyant des messages aux contacts:

def send_message(target):
global message,wait, browser
try:
    x_arg = '//span[contains(@title,' + target + ')]'
    group_title = wait.until(EC.presence_of_element_located((By.XPATH, x_arg)))
    group_title.click()
    input_box = browser.find_element_by_xpath('//*[@id="main"]/footer/div[1]/div[2]/div/div[2]')
    input_box.send_keys(message + Keys.ENTER)
    time.sleep(1)
except NoSuchElementException:
    return

Ici, la variable target est le nom du contact auquel vous voulez envoyer un message. La variable message contient le message texte que vous souhaitez envoyer à ce contact. La variable browser est une variable de pilote Web.

J'ai déjà travaillé sur WhatsApp Automation, en cas d'aide, consultez le lien: https://github.com/shauryauppal/PyWhatsapp

Vous avez déclaré deux problèmes:

  1. Vous ne pouvez pas accéder aux noms de contacts par liste de contacts ou par liste de contacts archivée. Le seul moyen est d'avoir des contacts récents dans le chat. Pour les autres contacts, vous devez visiter la liste de tous les contacts, sélectionner la personne cible, puis envoyer des messages. (Sera mis en œuvre bientôt).

  2. L'envoi d'images, de fichiers et de vidéos peut être implémenté par PyAutoIt. Reportez-vous à mon rapport, j'ai déjà implémenté cela.

Étape 1: Lien d'installation AutoIt.exe

Étape 2: 

pip installer PyAutoIt

Référez-vous à mon code ou ce lien pour vous guider.

1
shaurya uppal

Exemple de code Java de base pour rechercher un contact, envoyer un message et/ou un fichier. Vous pouvez implémenter une attente explicite si besoin est.

driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

List<String> targets = new ArrayList<>();

for (String target:targets) {
    driver.findElement(By.xpath("//button[.//span[@data-icon='search']]/..//input")).clear();
    driver.findElement(By.xpath("//button[.//span[@data-icon='search']]/..//input")).sendKeys(target);
    try {
        driver.findElement(By.cssSelector("span[title='"+target+"']")).click();
    } catch (WebDriverException e) {
        System.out.println("Not found");
        continue;
    }
    driver.findElement(By.cssSelector("div[contenteditable='true']")).sendKeys("MassageToSend");
    driver.findElement(By.cssSelector("span[data-icon='send']")).click();

    //To send attachments
    //click to add
    driver.findElement(By.cssSelector("span[data-icon='clip']")).click();
    //add file to send by file path
    driver.findElement(By.cssSelector("input[type='file']")).sendKeys("FilePath");
    //click to send
    driver.findElement(By.cssSelector("span[data-icon='send-light']")).click();
}

En python (peut contenir des erreurs de syntaxe):

if msgToSend[count][0]==curHour and msgToSend[count][1]==curMin and msgToSend[count][2]==curSec:
    # utility variables to tract count of success and fails
    success = 0
    sNo = 1
    failList = []

    # Iterate over selected contacts
    for target in targets:
        print(sNo, ". Target is: " + target)
        sNo+=1

        inputSearchBox = driver.find_element_by_id('//button[.//span[@data-icon="search"]]/..//input')
        inputSearchBox.clear()
        inputSearchBox.send_keys(target[1:len(target) - 1])

        try:
            wait5.until(EC.presence_of_element_located((By.CSSSELECTOR, 'span[title="'+ target +'"]')))
        except:
            print("Cannot find Target: " + target)
            failList.append(target)
            continue

        driver.find_element_by_css_selector('div[contenteditable="true"]').sendKeys("Hello, " + target + "."+ Keys.SHIFT + Keys.ENTER + msgToSend[count][3] + Keys.SPACE)
        driver.find_element_by_css_selector('span[data-icon="send"]').click()

        # To send attachments
        # click to add
        driver.find_element_by_css_selector('span[data-icon="clip"]').click()
        # add file to send by file path
        driver.find_element_by_css_selector('input[type="file"]').sendKeys("FilePath")
        # click to send
        driver.find_element_by_css_selector('span[data-icon="send-light"]').click()
0
Sers