Я пытаюсь отправить сообщение WhatsApp, извлекая некоторую информацию (имя пользователя, мобильный телефон) из созданной мною базы данных.
Когда я извлекаю фрейм данных и создаю список, содержащий только мобильные телефоны, и перебираю его, все сообщения отправлены. Но когда я преобразую фрейм данных в dict и перебираю ключ и значение (чтобы я мог отправлять str.format и отправлять больше личных сообщений), WhatsApp просто отправляет сообщение для первого пользователя.
Кто-нибудь знает, как я могу отправить текст сообщения всем пользователям, повторяя диктовку?
from time import sleep
from selenium.webdriver.common.by import By
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.support.ui import WebDriverWait
import socket
# here I import from other file my begginers dataframe
from users_pg_to_csv import beg_users, beginers_query, dbname, host, port, user, pwd
users = beg_users(beginers_query, dbname, host, port, user, pwd)
no_of_message = 1 # no. of time
# create dict and list of phone numbers
dict_users = users.set_index('username')['cellphone'].to_dict() # {user: cellphone}
moblie_no_list = users['cellphone'].tolist() # list of phone numbers
def element_presence(by,xpath,time):
element_present = EC.presence_of_element_located((By.XPATH, xpath))
WebDriverWait(driver, time).until(element_present)
def is_connected():
try:
socket.create_connection(("www.google.com", 80))
return True
except :
is_connected()
driver = webdriver.Chrome('/usr/local/bin/chromedriver')
driver.get("http://web.whatsapp.com")
sleep(10) #wait time to scan the code in second
def send_whatsapp_msg(phone_number, text):
driver.get("https://web.whatsapp.com/send?phone={}&source=&data=#".format(phone_number))
try:
driver.switch_to.alert().accept()
except Exception as e:
pass
try:
element_presence(By.XPATH, '//*[@id="main"]/footer/div[1]/div[2]/div/div[2]', 30)
txt_box = driver.find_element(By.XPATH, '//*[@id="main"]/footer/div[1]/div[2]/div/div[2]')
global no_of_message
for x in range(no_of_message):
txt_box.send_keys(text)
txt_box.send_keys("\n")
except Exception as e:
pass
# This snippet works for all numbers, but i cant personalize the message...
# for phone_number in moblie_no_list: # ['cellphone']:
# message_text = 'amanhã tem aula de luta! Levar ...'
# try:
# send_whatsapp_msg(int('55'+str(phone_number)), message_text) # (number)), message_text)
# sleep(2)
#
# except Exception as e:
# sleep(2)
# is_connected()
# this only send the message for the first user, sometimes the second too (???) :
def run():
for key, value in dict_users.items():
message_text = '{}, amanhã tem aula de luta! Levar equipamento completo '
#this prints the right info
print("message text: ", message_text.format(key), "\n", "cellphone: ", value)
try:
send_whatsapp_msg(int('55'+str(value)), message_text.format(key))
except Exception as e:
sleep(2)
is_connected()
run()