from selenium import webdriver # Set up selenium using instructions from here: https://selenium-python.readthedocs.io/installation.html import time import urllib import argparse import logging logging.getLogger().setLevel(logging.INFO) def send_messages(msg, numbers, delay): logging.info("Encoding message") msg = urllib.parse.quote(msg) logging.info("Starting Driver.") driver = webdriver.Firefox() time.sleep(delay) for cnt, i in enumerate(numbers): logging.info("Sending to recepient {}.".format(cnt+1)) driver.get("https://api.whatsapp.com/send?phone={}&text={}".format(i, msg)) time.sleep(delay) button = driver.find_element_by_class_name("button") button.click() time.sleep(delay) link = driver.find_element_by_class_name("action__link") link.click() check = True logging.info("Log in to Whatsapp Web if requested.") while check: try: driver.find_element_by_class_name("_3PxOr") except: check = False check = True send = None while check: try: send = driver.find_element_by_class_name("_3M-N-") check = False except: check = True time.sleep(delay) send.click() time.sleep(delay) logging.info("Sent {} message.".format(cnt+1)) driver.quit() if __name__=="__main__": logging.info("Parsing Arguments") parser = argparse.ArgumentParser(description="Send messages to users in bulk through WhatsApp") parser.add_argument("-nf", metavar = "--numbersFile", type=str, help="Path to file with all the numbers") parser.add_argument("-mf", metavar = "--msgFile", type=str, help="Path to file with the message") parser.add_argument("-ns", metavar = "--numberSep", type=str, help="Seperator for the numbers") parser.add_argument("-d", metavar = "--delay", type=int, help="Delay between each step. Adjust based on your internet speed.", nargs="?") args = parser.parse_args() if args.d == None: args.d = 2 logging.info("Done.") logging.info("Reading message.") msgf = open(args.mf, 'r') msg = msgf.read() msgf.close() logging.info("Done.") logging.info("Reading numbers.") nf = open(args.nf, 'r') numbers = nf.read() nf.close() numbers = numbers.split(args.ns) logging.info("Done.") send_messages(msg, numbers, args.d)