Browser automation for WhatsApp Web service with Python & Selenium.
Project consists to allow a user, with whatsapp installed in their phone, to connect their phone with whatsapp web service https://web.whatsapp.com and to automate the functionalities a user normally performs when using whatsapp as a chat app.
Some functionalities:
Simon can detect new message(s), read them, analyse it and reply if needed.
Install by simple typing pip install whatsapp-web
and
in your python file you can use it import simon
For the library we are using the Page Pattern recommended by the selenium python library.
import time
from selenium import webdriver
from simon.accounts.pages import LoginPage
from simon.header.pages import HeaderPage
from simon.pages import BasePage
# Creating the driver (browser)
driver = webdriver.Firefox()
driver.maximize_window()
# 1. Login
# and uncheck the remember check box
# (Get your phone ready to read the QR code)
login_page = LoginPage(driver)
login_page.load()
login_page.remember_me = False
time.sleep(7)
# 2. The base page is inherited by all pages
# and here you can check whether any
# page is available on the screen of
# the browser.
# we don't need to load the pages as whatsapp
# web works as one-page web app
base_page = BasePage(driver)
base_page.is_title_matches()
base_page.is_welcome_page_available()
base_page.is_nav_bar_page_available()
base_page.is_search_page_available()
base_page.is_pane_page_available()
# chat is only available after you open one
base_page.is_chat_page_available()
# 3. Logout
header_page = HeaderPage(driver)
header_page.logout()
# Close the browser
driver.quit()
import time
from selenium import webdriver
from simon.accounts.pages import LoginPage
from simon.chat.pages import ChatPage
from simon.chats.pages import PanePage
from simon.header.pages import HeaderPage
# Creating the driver (browser)
driver = webdriver.Firefox()
driver.maximize_window()
# Login
# and uncheck the remember check box
# (Get your phone ready to read the QR code)
login_page = LoginPage(driver)
login_page.load()
time.sleep(7)
# 1. Get all opened chats
# opened chats are the one chats or conversations
# you already have in your whatsapp.
# IT WONT work if you are looking for a contact
# you have never started a conversation.
pane_page = PanePage(driver)
# get all chats
opened_chats = pane_page.opened_chats
# iterating over them
for oc in opened_chats:
print(oc.name) # contact name (as appears on your whatsapp)
print(oc.icon) # the url of the image
print(oc.last_message)
print(oc.last_message_time) # datetime object
print(oc.has_notifications()) # are there unread messages?
print(oc.notifications) # returns a integer with the qty of new messages, if there are.
# 2. Go into the chat
# just click on one to open the chat page
# (where the conversation is happening)
first_chat = opened_chats[0]
first_chat.click()
# 3. Read the last 10 messages from your contact
chat_page = ChatPage(driver)
msgs = chat_page.messages.newest(10, filterby='contact')
for msg in msgs:
print(msg.contact) # name (all should be the same)
print(msg.date)
print(msg.text)
print(msg.status)
# 4. Reply to the most recent message
msg = msgs[0] # get the first of the messages query done in previous step
msg = chat_page.messages.newest(filterby='contact')
# Be careful as library can only now reply to text message
# Replying to a msg type (video, image, giff, etc) is not implemented yet.
msg.reply("This a reply to a specific text msg.")
# Logout
header_page = HeaderPage(driver)
header_page.logout()
# Close the browser
driver.quit()
For more functionalities that is offered by the library please check the tests. Here a couple:
Note: If you will try to run the test yourself locally, some of them won't work as some tests are done offline with some html templates that are not available in the repo
Technology Stack | ||
---|---|---|
Python | Language | |
Selenium | Browser Automation | |
Whatsapp Web | Chat Service |
Get in touch -–> fantaso