Blog này sẽ tập trung vào việc tạo tập lệnh python sẽ đọc số điện thoại, tên và tin nhắn từ excel, sau đó gửi tin nhắn WhatsApp hàng loạt đến các số điện thoại tương ứng. Một lưu ý ở đây là số điện thoại phải được lưu trên thiết bị đang được sử dụng để gửi tin nhắn WhatsApp
Trong blog này, tôi sẽ thảo luận, về
- WhatsApp Web và cách tập lệnh này sử dụng nó
- Chức năng phân tích khôn ngoan của kịch bản
- Bản demo nhanh giải thích hoạt động của tập lệnh
- Một cách khác để tạo tập lệnh
- Một số ý tưởng để sửa đổi và cải tiến trong kịch bản
Hãy bắt đầu với WhatsApp Web
web whatsapp
web whatsapp
Web WhatsApp là một tính năng của WhatsApp cho phép bạn vận hành
WhatsApp của mình từ máy tính xách tay hoặc trình duyệt máy tính để bàn của bạn. Các bước để sử dụng web WhatsApp khá đơn giản, chỉ cần mở trình duyệt chrome trong máy tính của bạn và mở trang web. whatsapp. com, tiếp theo hãy quét mã QR xuất hiện bằng điện thoại của bạn và WhatsApp của bạn sẽ xuất hiện trên trình duyệt chrome. Tại đây bạn có thể nhắn tin cho bất kỳ ai hoặc bất kỳ nhóm nào hoặc có thể xem trạng thái WhatsApp.
Tập lệnh này sử dụng thư viện selen để tự động hóa trình duyệt và gửi tin nhắn hàng loạt tới nhiều địa chỉ liên hệ trong WhatsApp
Khi đã hiểu cách hoạt động cơ bản của tập lệnh, hãy chuyển sang phần
phân tích chức năng-khôn ngoan của tập lệnh.
import art, time, os, platform
from colorama import init, Fore
from termcolor import colored
import pandas as pd
import datetime
from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains
Vào chế độ toàn màn hình Thoát chế độ toàn màn hình
Tập lệnh bắt đầu bằng cách nhập tất cả các mô-đun cần thiết.
- Mô-đun nghệ thuật được sử dụng để tạo và hiển thị nghệ thuật ASCII cho tập lệnh. Nếu bạn muốn biết nó hoạt động như thế nào, bạn có thể xem blog này
- Thời gian được sử dụng để tạm dừng thực thi chương trình trong vài giây sử dụng thời gian. ngủ[]
- Hệ điều hành được sử dụng để chạy các lệnh của hệ điều hành trong tập lệnh
- Mô-đun nền tảng được sử dụng để xác định hệ điều hành
Hệ điều hành và nền tảng cùng được sử dụng để xóa màn hình, như bạn có thể thấy
tại đây.
- Colorama và termcolor được sử dụng để hiển thị đầu ra bảng điều khiển màu của tập lệnh. Nếu bạn muốn biết thêm về họ, bạn có thể xem blog này
- Pandas được sử dụng để đọc dữ liệu từ tệp excel
- Datetime được sử dụng để tìm ngày và giờ hiện tại
- Và cuối cùng, chúng ta có selen. Tất cả các câu lệnh nhập mà bạn thấy ở đây chỉ là nhập
- Các lớp và chức năng cần thiết từ Selenium
FILE_LOC = "data.xlsx"
SRNO = 'SRNO'
NAME = 'Name'
PHONENUMBER = 'Phone Number'
MESSAGE = 'Message'
REPLACENAME = '{{name}}'
URL = '//web.whatsapp.com/'
WAITER_ELEMENT = "landing-title _3-XoE"
PHONE_NUMER_INPUT = "//*[@id='side']/div[1]/div/label/div/div[2]"
PERSON_DIV = "//*[@id='pane-side']/div[1]/div/div/div[1]/div/div/div[1]/div/div/img"
MESSAGE_INPUT = "//*[@id='main']/footer/div[1]/div[2]/div/div[1]/div/div[2]"
SEND_BUTTON = "//*[@id='main']/footer/div[1]/div[2]/div/div[2]/button"
Vào chế độ toàn màn hình Thoát chế độ toàn màn hình
Tiếp theo, chúng tôi có tất cả các hằng số được sử dụng trong tập lệnh, bao gồm URL, tên trường excel, nút và xpath hộp văn bản, v.v. Chỉ là một ý tưởng nhanh, xpath về cơ bản giống như các bộ lọc tìm kiếm được sử dụng để xác định một phần tử nhất định hoặc một nhóm phần tử trong trang HTML
driver = webdriver.Chrome['chromedriver.exe']
driver.implicitly_wait[10]
waiter = WebDriverWait[driver, 10]
data = []
Vào chế độ toàn màn hình Thoát chế độ toàn màn hình
Tiếp theo, chúng tôi đã bắt đầu và định cấu hình trình điều khiển và người phục vụ của
tập lệnh của chúng tôi.
def printData[message, type]:
if type == 'INFO':
print['[' + colored[datetime.datetime.now[].strftime['%H:%M:%S'], 'cyan'] + '][' + colored['INFO', 'green'] + '] ' + message]
elif type == 'WARNING':
print['[' + colored[datetime.datetime.now[].strftime['%H:%M:%S'], 'cyan'] + '][' + colored['WARNING', 'yellow'] + '] ' + message]
elif type == 'ERROR':
print['[' + colored[datetime.datetime.now[].strftime['%H:%M:%S'], 'cyan'] + '][' + colored['ERROR', 'red'] + '] ' + message]
Vào chế độ toàn màn hình Thoát chế độ toàn màn hình
Bây giờ chúng ta có chức năng đầu tiên của tập lệnh, chức năng printData
Hàm này yêu cầu hai đối số, thông báo và loại. Chức năng này được sử dụng để in dữ liệu có màu trên bảng điều khiển, có thể là thông tin, cảnh báo hoặc lỗi. Hàm chỉ cần kiểm tra loại được truyền vào nó là gì và theo đó in thông báo trên bàn điều khiển
def read_data_from_excel[]:
try:
df = pd.read_excel[FILE_LOC]
printData["Retrieving data from excel", 'INFO']
except:
printData["Excel 'data.xlsx' not found", 'ERROR']
printData["Found {0} messages to be send".format[len[df.index]], 'INFO']
for i in df.index:
if '+' not in str[df[PHONENUMBER][i]]:
number = '+91' + str[df[PHONENUMBER][i]]
else:
number = str[df[PHONENUMBER][i]]
output = {
'SrNo': df[SRNO][i],
'Name': df[NAME][i],
'PhoneNumber': number,
'Message': df[MESSAGE][i].replace[REPLACENAME, df[NAME][i]]
}
data.append[output]
Vào chế độ toàn màn hình Thoát chế độ toàn màn hình
Tiếp theo, chúng ta có hàm read_data_from_excel[] đọc tất cả các thông báo được gửi từ dữ liệu. tập tin xlsx. Hàm sử dụng thư viện của gấu trúc để đọc dữ liệu từ excel và lưu trữ các mục excel trong danh sách dữ liệu trong tập lệnh
def send_whatsapp_message[]:
global driver
driver.get[URL]
printData["Loading site...", 'INFO']
waiter.until[EC.title_is["WhatsApp"]]
printData["Site loaded successfully...", 'INFO']
printData["Waiting for user to log in using WhatsApp Web", 'INFO']
waitCounter = 0
while 1:
try:
waiter.until[EC.presence_of_element_located[[By.XPATH, "//canvas[@aria-label='Scan me!']"]]]
waitCounter+=1
if waitCounter%1000 == 0:
printData["Waiting for user to log in...", 'WARNING']
except:
printData["Logged in to WhatsApp", 'INFO']
break
for entry in data:
driver.find_element_by_xpath[PHONE_NUMER_INPUT].send_keys[str[entry['PhoneNumber']]]
time.sleep[5]
driver.find_element_by_xpath[PHONE_NUMER_INPUT].send_keys[Keys.ENTER]
time.sleep[5]
driver.find_element_by_xpath[MESSAGE_INPUT].send_keys[str[entry['Message']]]
time.sleep[5]
driver.find_element_by_xpath[SEND_BUTTON].click[]
time.sleep[5]
printData["Successfully send message to {0}, name: {1}".format[str[entry['PhoneNumber']], str[entry['Name']]], 'INFO']
Vào chế độ toàn màn hình Thoát chế độ toàn màn hình
Tiếp theo, chúng ta có chức năng quan trọng nhất của tập lệnh, đó là hàm send_whatsapp_message[]. Chức năng này chịu trách nhiệm đọc các liên hệ từ danh sách dữ liệu và gửi từng tin nhắn WhatsApp cho từng người trong số họ.
Chức năng bắt đầu bằng cách tải trang web WhatsApp và đợi nó tải. Sau khi trang web được tải, tập lệnh sẽ đợi người dùng quét mã QR và đăng nhập vào trang web. Khi người dùng đã đăng nhập, tập lệnh sẽ tìm kiếm từng liên hệ, mở cuộc trò chuyện của họ, nhập tin nhắn và gửi nó
if __name__ == '__main__':
# Initialize colorama
init[]
# Clear the screen
if platform.system[] == 'Windows':
os.system['cls']
else:
os.system['clear']
# Display ASCII art
print[art.text2art["WhatsApp Python"]]
print[Fore.CYAN + "\nCreated By:" + Fore.RESET + " Vishesh Dvivedi [All About Python]\n"]
print[Fore.YELLOW + "GitHub: " + Fore.RESET + " visheshdvivedi"]
print[Fore.YELLOW + "Youtube:" + Fore.RESET + " All About Python"]
print[Fore.YELLOW + "Instagram:" + Fore.RESET + " @itsallaboutpython"]
print[Fore.YELLOW + "Blog Site:" + Fore.RESET + " itsallaboutpython.blogspot.com\n"]
# Read data from 'data.xlsx' file
read_data_from_excel[]
# Send whatsapp message
send_whatsapp_message[]
# Close chromedriver
driver.close[]
Vào chế độ toàn màn hình Thoát chế độ toàn màn hình
Và cuối cùng, chúng ta có chức năng chính. Trong trường hợp bạn chưa rõ về cách sử dụng if __name__ == ‘__main__’, thì bạn có thể xem một blog trên kênh của tôi dành riêng cho chủ đề này
Trong chức năng chính, đầu tiên, init[] được sử dụng để khởi tạo Colorama. Tiếp theo, tôi đã sử dụng một đoạn mã để thực thi lệnh HĐH để xóa màn hình, dựa trên hệ điều hành được sử dụng. Tiếp theo, mô-đun nghệ thuật được sử dụng để hiển thị ASCII dành cho tập lệnh và bên dưới đó, bạn sẽ tìm thấy thông tin liên hệ về tôi, trong trường hợp bạn muốn liên hệ với tôi
Và cuối cùng, chúng ta gọi hàm read_data_from_excel[] và
send_whatsapp_message[] thực hiện phần còn lại của
hàm, như chúng ta đã thảo luận trước đây. Và sau đó chúng tôi kết thúc tập lệnh bằng cách đóng trình điều khiển.
Đó là tất cả những gì có trong kịch bản này. Đây là mã đầy đủ
import art, time, os, platform
from colorama import init, Fore
from termcolor import colored
import pandas as pd
import datetime
from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains
FILE_LOC = "data.xlsx"
SRNO = 'SRNO'
NAME = 'Name'
PHONENUMBER = 'Phone Number'
MESSAGE = 'Message'
REPLACENAME = '{{name}}'
URL = '//web.whatsapp.com/'
WAITER_ELEMENT = "landing-title _3-XoE"
PHONE_NUMER_INPUT = "//*[@id='side']/div[1]/div/label/div/div[2]"
PERSON_DIV = "//*[@id='pane-side']/div[1]/div/div/div[1]/div/div/div[1]/div/div/img"
MESSAGE_INPUT = "//*[@id='main']/footer/div[1]/div[2]/div/div[1]/div/div[2]"
SEND_BUTTON = "//*[@id='main']/footer/div[1]/div[2]/div/div[2]/button"
driver = webdriver.Chrome['chromedriver.exe']
driver.implicitly_wait[10]
waiter = WebDriverWait[driver, 10]
data = []
def printData[message, type]:
if type == 'INFO':
print['[' + colored[datetime.datetime.now[].strftime['%H:%M:%S'], 'cyan'] + '][' + colored['INFO', 'green'] + '] ' + message]
elif type == 'WARNING':
print['[' + colored[datetime.datetime.now[].strftime['%H:%M:%S'], 'cyan'] + '][' + colored['WARNING', 'yellow'] + '] ' + message]
elif type == 'ERROR':
print['[' + colored[datetime.datetime.now[].strftime['%H:%M:%S'], 'cyan'] + '][' + colored['ERROR', 'red'] + '] ' + message]
def read_data_from_excel[]:
try:
df = pd.read_excel[FILE_LOC]
printData["Retrieving data from excel", 'INFO']
except:
printData["Excel 'data.xlsx' not found", 'ERROR']
printData["Found {0} messages to be send".format[len[df.index]], 'INFO']
for i in df.index:
if '+' not in str[df[PHONENUMBER][i]]:
number = '+91' + str[df[PHONENUMBER][i]]
else:
number = str[df[PHONENUMBER][i]]
output = {
'SrNo': df[SRNO][i],
'Name': df[NAME][i],
'PhoneNumber': number,
'Message': df[MESSAGE][i].replace[REPLACENAME, df[NAME][i]]
}
data.append[output]
def send_whatsapp_message[]:
global driver
driver.get[URL]
printData["Loading site...", 'INFO']
waiter.until[EC.title_is["WhatsApp"]]
printData["Site loaded successfully...", 'INFO']
printData["Waiting for user to log in using WhatsApp Web", 'INFO']
waitCounter = 0
while 1:
try:
waiter.until[EC.presence_of_element_located[[By.XPATH, "//canvas[@aria-label='Scan me!']"]]]
waitCounter+=1
if waitCounter%1000 == 0:
printData["Waiting for user to log in...", 'WARNING']
except:
printData["Logged in to WhatsApp", 'INFO']
break
for entry in data:
driver.find_element_by_xpath[PHONE_NUMER_INPUT].send_keys[str[entry['PhoneNumber']]]
time.sleep[5]
driver.find_element_by_xpath[PHONE_NUMER_INPUT].send_keys[Keys.ENTER]
time.sleep[5]
driver.find_element_by_xpath[MESSAGE_INPUT].send_keys[str[entry['Message']]]
time.sleep[5]
driver.find_element_by_xpath[SEND_BUTTON].click[]
time.sleep[5]
printData["Successfully send message to {0}, name: {1}".format[str[entry['PhoneNumber']], str[entry['Name']]], 'INFO']
if __name__ == '__main__':
# Initialize colorama
init[]
# Clear the screen
if platform.system[] == 'Windows':
os.system['cls']
else:
os.system['clear']
# Display ASCII art
print[art.text2art["WhatsApp Python"]]
print[Fore.CYAN + "\nCreated By:" + Fore.RESET + " Vishesh Dvivedi [All About Python]\n"]
print[Fore.YELLOW + "GitHub: " + Fore.RESET + " visheshdvivedi"]
print[Fore.YELLOW + "Youtube:" + Fore.RESET + " All About Python"]
print[Fore.YELLOW + "Instagram:" + Fore.RESET + " @itsallaboutpython"]
print[Fore.YELLOW + "Blog Site:" + Fore.RESET + " itsallaboutpython.blogspot.com\n"]
# Read data from 'data.xlsx' file
read_data_from_excel[]
# Send whatsapp message
send_whatsapp_message[]
# Close chromedriver
driver.close[]
Vào chế độ toàn màn hình Thoát chế độ toàn màn hình
Hãy xem qua một bản demo nhanh để xem nó hoạt động như thế nào
Tự động hóa WhatsApp Python
Đây là giao diện của tập lệnh khi nó được thực thi. Tôi có trình duyệt chrome ngay tại đây và trang web. whatsapp. trang web com được mở ngay tại đây. Bây giờ tôi sẽ quét mã QR bằng WhatsApp và WhatsApp của tôi sẽ xuất hiện trước màn hình của tôi
Sau đó, tập lệnh sẽ lần lượt tìm kiếm các liên hệ từ tất cả các liên hệ, mở cuộc trò chuyện của họ và sau đó nó sẽ tự động nhắn tin cho họ. Nếu tin nhắn có nhiều dòng, thì một tin nhắn sẽ được gửi cho mỗi dòng
Tôi hy vọng điều này đã xóa tan nghi ngờ của bạn về kịch bản này. Trong trường hợp bạn vẫn còn bất kỳ nghi ngờ nào, bạn có thể đề cập đến nó trong phần bình luận bên dưới
Tất cả mã này có thể hơi khó hiểu đối với một số bạn và bạn có thể tự hỏi liệu có cách nào dễ dàng và thay thế để tạo mã này không. Có
pywhatkit
Có một mô-đun có tên pywhatkit, chứa một phương thức cho phép bạn gửi các tin nhắn WhatsApp tùy chỉnh. Nếu các bạn muốn mình sẽ làm một blog riêng giải thích về pywhatkit cho các bạn
Bây giờ đến chủ đề cuối cùng của blog này, Ý tưởng sửa đổi và cải tiến trong blog. Tôi đã tạo tập lệnh này chỉ để giải thích cho bạn tất cả cách bạn có thể tạo tập lệnh này. Tuy nhiên, vẫn còn rất nhiều sửa đổi và cải tiến có thể được thực hiện trong tập lệnh
Ví dụ: bạn có thể thêm hệ thống thời gian cho phép bạn gửi tin nhắn WhatsApp vào một ngày và giờ cụ thể. Để làm được điều đó, bạn sẽ phải thêm một vòng lặp while trước khi gọi send_whatsapp_message. Vòng lặp sẽ kiểm tra sau mỗi phút thời gian hiện tại. Nếu nó khớp với thời gian gửi tin nhắn WhatsApp, vòng lặp sẽ bị ngắt và tin nhắn sẽ được gửi
Tương tự, bạn có thể tạo một hằng số cho thời gian chờ và hằng số đó có thể được sử dụng để tìm hiểu thời gian chờ đợi trong khi gửi tin nhắn, vì web WhatsApp có thể chặn tập lệnh python này trong một số trường hợp
Đó là tất cả trong blog này, hy vọng bạn thích blog của tôi. Nếu bạn đã đăng ký, đừng quên đăng ký kênh của tôi để xem nhiều tập lệnh tự động hóa khác mà tôi đã tạo cho Instagram và YouTube.