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:
Voici les problèmes que je suis incapable de résoudre:
Comme le code est assez long, voici le lien qui y mène: https://github.com/harshitsidhwa/WhatsApp-bot-Selenium
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:
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).
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.
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()