0

I tried to send a message to my friend in whatsapp using selenium. I downloaded the chromedriver of latest version for windows , when i ran the code the whatsapp web was opened but the message was not sent . This is my code and the errors i have got :-

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
import time

# Replace below path with the absolute path
# to chromedriver in your computer
*driver = webdriver.Chrome(executable_path=r'D:\Whatsapp Automation\chromedriver.exe')

driver.get("https://web.whatsapp.com/")
wait = WebDriverWait(driver, 600)

# Replace 'Friend's Name' with the name of your friend
# or the name of a group
target = "Friend's name"

# Replace the below string with your own message
string = "Hii"

x_arg = '//span[contains(@title,' + target + ')]'
group_title = wait.until(EC.presence_of_element_located((
    By.XPATH, x_arg)))
group_title.click()
inp_xpath = '//div[@class="input"][@dir="auto"][@data-tab="1"]'
input_box = wait.until(EC.presence_of_element_located((
    By.XPATH, inp_xpath)))
for i in range(100):
    input_box.send_keys(string + Keys.ENTER)
    time.sleep(1)

This is the debug file i have got

[1228/125305.696:ERROR:process_reader_win.cc(123)] NtOpenThread: {Access Denied} A process has requested access to an object, but has not been granted those access rights. (0xc0000022)
[1228/125305.696:ERROR:exception_snapshot_win.cc(99)] thread ID 8952 not found in process
[1228/125305.742:ERROR:process_reader_win.cc(151)] SuspendThread: Access is denied. (0x5)
[1228/125305.758:ERROR:process_reader_win.cc(151)] SuspendThread: Access is denied. (0x5)
[1228/125305.758:ERROR:process_reader_win.cc(151)] SuspendThread: Access is denied. (0x5)
[1228/125305.758:ERROR:process_reader_win.cc(151)] SuspendThread: Access is denied. (0x5)
[1228/125305.758:ERROR:process_reader_win.cc(151)] SuspendThread: Access is denied. (0x5)
[1228/125305.758:ERROR:process_reader_win.cc(151)] SuspendThread: Access is denied. (0x5)
[1228/125305.758:ERROR:process_reader_win.cc(123)] NtOpenThread: {Access Denied} A process has requested access to an object, but has not been granted those access rights. (0xc0000022)
[1228/125305.758:ERROR:exception_snapshot_win.cc(99)] thread ID 10128 not found in process

I downloaded the chromedriver from https://chromedriver.storage.googleapis.com/index.html?path=87.0.4280.88/

Moshe Slavin
  • 5,127
  • 5
  • 23
  • 38

1 Answers1

0

I have done that using selenium. I have made a whatsapp bot to send message automatically when it received any new message from anyone.

Check the following code and try it for do your job to send a message to a person.


from selenium import webdriver
import time

try:
    driver = webdriver.Chrome(executable_path=r'D:\Whatsapp Automation\chromedriver.exe')
except:
    driver = webdriver.Chrome(ChromeDriverManager().install())       # This will install the updated chromedriver automatically.

driver.get("https://web.whatsapp.com")
time.sleep(25) # For scan the qr code from the mobile phone to connect.
# Plese make sure that you have done the qr code scan successful.
confirm = int(input("Press 1 to proceed if sucessfully login or press 0 for retry : "))

if confirm == 1:
   print("Continuing...")
elif confirm == 0:
   driver.close()
   exit()
else:
   print("Sorry Please Try again")
   driver.close()
   exit()

'''
while True:
    # Here you can handle the received message and can send message to any selected person. Or you can follow my way to reply each person on their new message.
    send_message(driver)
'''

def send_message(chrome_browser):
    print("Starting Sending_msg")
    user_name_list = ['My Bot +1']  # Add the all users name in the list to whom you want to sent message.

    for user_name in user_name_list:
        try:
            # Select for the title having user name
            user = chrome_browser.find_element_by_xpath('//span[@title="{}"]'.format(user_name))
            user.click()
            time.sleep(1)
        except NoSuchElementException as se:
            print("Error : {}\nCause of Error : {}\n Line number : {}".format(sys.exc_info()[0], sys.exc_info()[1], sys.exc_info()[2].tb_lineno))
            print(se)
            new_chat(user_name, chrome_browser)

        # Typing message into message box
        time.sleep(1)
        
        message_input_box = chrome_browser.find_element_by_xpath('//div[@class="p3_M1 _1YbbN"]')
        message_box.send_keys('Hey, I am your whatsapp bot :)')
      
        time.sleep(1)

        # Click on send button
        try:
            message_box = chrome_browser.find_element_by_xpath('//button[@class="_4sWnG"]')
            message_box.click()
        except:
            print("Error : {}\nCause of Error : {}\n Line number : {}".format(sys.exc_info()[0], sys.exc_info()[1], sys.exc_info()[2].tb_lineno))
            time.sleep(1)
            message_box = chrome_browser.find_element_by_xpath('//button[@class="_4sWnG"]')
            message_box.click()

        time.sleep(2)


send_message(driver)

Node : I am not sure if the whatsapp-web have changed its web elements classes names again. If get any error related to no such element find then check the whatsapp web element classes names from inspecting it and update it in the code.

  • Please make sure that the indentation is equal in code blocks if you are copying it.

  • Can read my another answer in following link for more info about WhatsApp web using python.

  • Line breaks in WhatsApp messages sent with Python

  • I am developing WhatsApp bot using python.

  • For contribution you can contact at : anurag.cse016@gmail.com

  • Please give a star on my https://github.com/4NUR46 If this Answer helps you.