파이썬 셀레니움 기초: 40대 실전 매크로 자동 로그인 (19편)

오늘은 파이썬 셀레니움 기초를 활용하여 막혀있던 웹사이트 로그인 장벽을 허물고 마우스 클릭을 자동화하는 ‘진짜 매크로(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)

(주의: 네이버 등 대형 포털은 기계식 로그인을 감지하면 ‘자동입력 방지 문자(캡차)’를 띄웁니다. 따라서 위 코드는 네이버로 원리만 이해하시고, 보안이 약한 사내 시스템이나 관공서 업무 포털 등에 적용하시는 것이 실무에 훨씬 유리합니다.)

파이썬 셀레니움 send_keys 함수를 이용한 로그인 데이터 자동 입력 화면
대체 텍스트: 파이썬 셀레니움 send_keys 함수를 이용한 로그인 데이터 자동 입력 화면

4. 실무 트러블슈팅: 로딩 시간을 무조건 기다려라

파이썬 셀레니움 기초에서 초보자들이 겪는 에러의 90%는 바로 ‘로딩 속도 차이’에서 발생합니다.

파이썬 코드는 빛의 속도로 다음 줄을 실행하려 합니다. 아직 화면에 아이디 입력창이 나타나지도 않았는데 코드는 이미 find_element로 아이디 창을 찾으려 하니 “그런 요소가 없습니다!”라며 빨간색 에러를 뱉고 뻗어버리는 것입니다.

따라서 셀레니움 코드를 짤 때는 페이지가 넘어가거나 팝업이 뜰 때마다 반드시 time.sleep(2) 와 같이 사람이 멈춰서 기다리는 것과 같은 여유 시간을 코드 사이에 넉넉하게 넣어주어야 합니다. 이것만 지키시면 어떤 사이트든 멈추지 않고 돌아가는 안정적인 매크로를 만들 수 있습니다.

셀레니움의 더 깊은 활용법과 다양한 클릭 기술이 궁금하시다면 [Selenium 공식 문서(한국어 제공)]를 참고해 보시면 큰 도움이 됩니다.

5. 글을 마치며: 눈앞의 장벽을 부수는 기술

오늘은 파이썬 셀레니움 기초를 통해 단순한 데이터 긁어오기를 넘어, 마우스 클릭과 키보드 타이핑까지 완벽히 통제하는 매크로 기술을 배웠습니다.

앞서 [18편: Tkinter 기초 – 프로그램 창 만들기 (클릭)]에서 배운 사용자 입력창(GUI)과 오늘의 셀레니움 기술을 합쳐 보십시오. 프로그램 창에 오늘 날짜만 치고 [실행] 버튼을 누르면, 파이썬이 알아서 협회 사이트에 접속해 로그인하고 방역 실적을 등록한 뒤 빠져나오는 공상과학 같은 무인 시스템이 대표님의 PC에 완성될 것입니다.

다음 시간에는 지금까지 배운 코딩 파일과 데이터를 깃허브(GitHub)라는 곳에 안전하게 백업하고 관리하는 방법에 대해 알아보겠습니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다