오늘은 파이썬 셀레니움 기초를 활용하여 막혀있던 웹사이트 로그인 장벽을 허물고 마우스 클릭을 자동화하는 ‘진짜 매크로(Macro)’ 기술에 대해 알아보겠습니다.
지난 15, 16편에서 우리는 웹 크롤링(BeautifulSoup)을 이용해 현장 날씨를 수집하는 데 성공했습니다. 하지만 실무에 크롤링을 적용하다 보면 곧바로 거대한 벽에 부딪힙니다. 방역 협회에 실적을 보고하거나 자재 사이트에서 재고를 파악하려면 반드시 ‘아이디와 비밀번호를 치고 로그인’을 해야 하기 때문입니다. 기존에 배운 방법으로는 이 로그인 창을 절대 뚫을 수 없습니다.
매일 아침 반복되는 관공서 및 거래처 사이트 로그인과 클릭 노가다, 이제 컴퓨터가 알아서 크롬 브라우저를 띄우고 스스로 타이핑하게 만들어 보겠습니다.

1. 파이썬 셀레니움 기초: 뷰티풀수프(BeautifulSoup)와의 차이점
초보자들이 가장 헷갈려 하는 것이 “언제 BeautifulSoup을 쓰고 언제 Selenium을 써야 하는가?”입니다. 방역 작업에 비유하자면 아주 이해하기 쉽습니다.
- BeautifulSoup (빠르지만 수동적): 인터넷 웹페이지의 껍데기(HTML)만 1초 만에 복사해 와서 글자만 빼내는 방식입니다. 아주 빠르지만, 화면에 떠 있는 버튼을 마우스로 클릭하거나 아이디를 입력하는 등의 ‘행동’은 아예 불가능합니다.
- Selenium (조금 느리지만 만능): 파이썬이 사람의 탈을 쓰고 실제 크롬(Chrome) 브라우저를 직접 켭니다. 그리고 사람이 마우스를 움직이고 키보드를 치는 것과 100% 똑같이 행동합니다.
즉, 클릭, 스크롤 내리기, 팝업창 닫기, 로그인하기 등 사람만이 할 수 있는 모든 인터넷 작업을 완벽하게 흉내 내는 매크로 라이브러리가 바로 Selenium(셀레니움)입니다.
2. 실전 1단계: 셀레니움 설치 및 세팅하기
과거에는 셀레니움을 쓰려면 내 크롬 버전에 맞는 ‘크롬 드라이버’라는 것을 매번 수동으로 다운로드받아야 해서 초보자들이 시작도 전에 포기하곤 했습니다. 하지만 최근 버전에서는 그럴 필요가 전혀 없습니다!
VS Code 하단의 터미널 창을 열고 아래 명령어 한 줄만 입력하면 모든 준비가 끝납니다.
pip install selenium
설치가 완료되었다면, 이제 파이썬에게 “크롬 브라우저를 열어줘!”라고 명령해 볼 차례입니다.
Python
from selenium import webdriver
import time
# 1. 크롬 브라우저를 엽니다. (최신 버전은 드라이버 자동 인식)
driver = webdriver.Chrome()
# 2. 원하는 웹사이트(예: 네이버)로 이동합니다.
driver.get("https://www.naver.com")
# 3. 브라우저가 바로 꺼지는 것을 막기 위해 5초 대기
time.sleep(5)
이 세 줄의 코드를 실행해 보십시오. 마우스를 건드리지도 않았는데 새 크롬 창이 스르륵 열리며 네이버 메인 화면이 뜨는 마법 같은 광경을 목격하실 수 있습니다.
3. 실전 2단계: 자동 로그인 매크로 코드 만들기
이제 본격적으로 네이버(또는 방역 관련 시스템) 로그인 페이지로 들어가서, 아이디와 비밀번호를 텍스트 박스에 자동으로 채워 넣고 [로그인] 버튼까지 눌러보겠습니다.
요소(아이디 창, 버튼 등)를 찾을 때는 By라는 모듈을 사용합니다.
Python
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
# 1. 크롬 열고 네이버 로그인 페이지로 바로 이동
driver = webdriver.Chrome()
driver.get("https://nid.naver.com/nidlogin.login")
time.sleep(2) # 페이지 로딩을 위해 2초 대기 (매우 중요)
# 2. 아이디와 비밀번호 입력창 찾아내기 (F12 개발자 도구 활용)
# 네이버 로그인 창의 아이디 칸 HTML id는 'id', 비밀번호 칸은 'pw'입니다.
id_box = driver.find_element(By.ID, "id")
pw_box = driver.find_element(By.ID, "pw")
# 3. 내 아이디와 비밀번호 쏘아 보내기 (send_keys)
id_box.send_keys("내네이버아이디")
time.sleep(1) # 사람처럼 보이게 1초 대기
pw_box.send_keys("내네이버비밀번호")
# 4. 로그인 버튼 찾아서 클릭하기 (click)
login_btn = driver.find_element(By.ID, "log.login")
login_btn.click()
print("자동 로그인 작업이 완료되었습니다!")
time.sleep(10)
(주의: 네이버 등 대형 포털은 기계식 로그인을 감지하면 ‘자동입력 방지 문자(캡차)’를 띄웁니다. 따라서 위 코드는 네이버로 원리만 이해하시고, 보안이 약한 사내 시스템이나 관공서 업무 포털 등에 적용하시는 것이 실무에 훨씬 유리합니다.)

4. 실무 트러블슈팅: 로딩 시간을 무조건 기다려라
파이썬 셀레니움 기초에서 초보자들이 겪는 에러의 90%는 바로 ‘로딩 속도 차이’에서 발생합니다.
파이썬 코드는 빛의 속도로 다음 줄을 실행하려 합니다. 아직 화면에 아이디 입력창이 나타나지도 않았는데 코드는 이미 find_element로 아이디 창을 찾으려 하니 “그런 요소가 없습니다!”라며 빨간색 에러를 뱉고 뻗어버리는 것입니다.
따라서 셀레니움 코드를 짤 때는 페이지가 넘어가거나 팝업이 뜰 때마다 반드시 time.sleep(2) 와 같이 사람이 멈춰서 기다리는 것과 같은 여유 시간을 코드 사이에 넉넉하게 넣어주어야 합니다. 이것만 지키시면 어떤 사이트든 멈추지 않고 돌아가는 안정적인 매크로를 만들 수 있습니다.
셀레니움의 더 깊은 활용법과 다양한 클릭 기술이 궁금하시다면 [Selenium 공식 문서(한국어 제공)]를 참고해 보시면 큰 도움이 됩니다.
5. 글을 마치며: 눈앞의 장벽을 부수는 기술
오늘은 파이썬 셀레니움 기초를 통해 단순한 데이터 긁어오기를 넘어, 마우스 클릭과 키보드 타이핑까지 완벽히 통제하는 매크로 기술을 배웠습니다.
앞서 [18편: Tkinter 기초 – 프로그램 창 만들기 (클릭)]에서 배운 사용자 입력창(GUI)과 오늘의 셀레니움 기술을 합쳐 보십시오. 프로그램 창에 오늘 날짜만 치고 [실행] 버튼을 누르면, 파이썬이 알아서 협회 사이트에 접속해 로그인하고 방역 실적을 등록한 뒤 빠져나오는 공상과학 같은 무인 시스템이 대표님의 PC에 완성될 것입니다.
다음 시간에는 지금까지 배운 코딩 파일과 데이터를 깃허브(GitHub)라는 곳에 안전하게 백업하고 관리하는 방법에 대해 알아보겠습니다.
