Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python으로 WhatsApp 챗봇 만들기: Selenium 자동화 완벽 가이드


이 글에서는 WhatsApp 챗봇을 만드는 방법을 알아보겠습니다. 하지만 트위터나 페이스북용 챗봇과 달리, WhatsApp은 정책상 챗봇을 플랫폼 내부에서 직접 실행하는 것을 허용하지 않습니다.

그래도 방법은 있습니다. 바로 Selenium을 활용하는 것입니다. Selenium은 개발자가 브라우저 작업을 자동화할 수 있도록 도와주는 파이썬의 강력한 패키지로, 이를 이용하면 브라우저를 통해 WhatsApp 웹 버전(WhatsApp Web)을 제어할 수 있습니다.

필수 요구 사항

프로젝트를 진행하려면 다음 세 가지가 필요합니다.

1. Selenium 설치

Selenium은 pip를 사용해 매우 간단하게 설치할 수 있습니다. 터미널에서 아래 명령어를 실행하세요.

$pip install selenium

2. 웹 드라이버(Web Driver)

Chrome, Firefox 등 원하는 브라우저의 웹 드라이버가 필요합니다. 여기서는 Chrome 웹 드라이버를 기준으로 설명하며, 운영체제(OS)에 맞는 드라이버는 아래 링크에서 다운로드할 수 있습니다.

  • https://chromedriver.storage.googleapis.com/index.html?path=2.46/

참고로, 최신 버전의 Chrome을 사용 중이라면 반드시 본인의 Chrome 버전과 일치하는 웹 드라이버를 다운로드해야 정상적으로 동작합니다.

3. WhatsApp 계정

WhatsApp 계정이 반드시 필요합니다. 계정이 없다면 미리 새로 생성해 두세요.

아래는 Python을 사용해 특정 연락처에게 WhatsApp 메시지를 전송하는 간단한 프로그램 예제입니다.

예제 코드

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
import sys

# 아래 경로를 본인 컴퓨터의 chromedriver 절대 경로로 변경하세요
driver = webdriver.Chrome(r'c:\users\rajesh\Desktop\chromedriver')

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

# 'My Bsnl' 부분을 실제 친구 이름 또는 그룹 이름으로 변경하세요
target = '"My Bsnl"'

# 아래 문자열을 본인이 보내고 싶은 메시지로 변경하세요
string = sys.argv[1]

x_arg = '//span[contains(@title,' + target + ')]'
group_title = wait.until(EC.presence_of_element_located((
By.XPATH, x_arg)))
print (group_title)
print ("Wait for few seconds")
group_title.click()
message = driver.find_elements_by_xpath('//*[@id="main"]/footer/div[1]/div[2]/div/div[2]')[0]

message.send_keys(string)
sendbutton = driver.find_elements_by_xpath('//*[@id="main"]/footer/div[1]/div[3]/button')[0]
sendbutton.click()
driver.close()

이제 명령 프롬프트에서 위 스크립트를 실행하고, 전송할 메시지를 명령줄 인자로 넘겨 보겠습니다.

>python whatsppPython.py "Hello"

DevTools listening on ws://127.0.0.1:12954/devtools/browser/a5bb04bd-66a3-4002-999f-6a0824f591da
<selenium.webdriver.remote.webelement.WebElement (session="83e7034b9a6f6b49e9e422e655f270d3", element="0.30994636046479007-1")>
after wait
….
…..

스크립트가 실행되면 Chrome 브라우저가 열리고 아래와 비슷한 화면이 나타납니다.

Python으로 WhatsApp 챗봇 만들기: Selenium 자동화 완벽 가이드

모바일 기기에서 WhatsApp을 열고 상단 바의 “WhatsApp 웹” 메뉴를 선택한 뒤, 화면에 표시된 QR 코드를 스캔하세요.

로그인이 완료되면 지정한 연락처(여기서는 “My Bsnl”)에게 메시지가 성공적으로 전송된 것을 확인할 수 있습니다.

Python으로 WhatsApp 챗봇 만들기: Selenium 자동화 완벽 가이드

추가 팁

최신 버전의 Selenium(4.x 이상)에서는 find_elements_by_xpath() 같은 구식 메서드가 지원 중단(deprecated)되었으므로, find_element(By.XPATH, ...) 형태로 코드를 수정하는 것이 좋습니다. 또한 WhatsApp 웹 UI는 업데이트에 따라 변경될 수 있으므로, XPath 선택자가 동작하지 않으면 해당 요소의 구조를 다시 확인해야 합니다.