실무에서 파이썬 셀레니움 크롤링 기술을 본격적으로 도입하기 전까지, 저는 웹 크롤링이 반쪽짜리 기술에 불과하다고 생각하며 깊은 좌절감을 맛보았습니다.
지난 글에서 배웠던 가벼운 도구(requests)로 예제 사이트의 게시판 제목을 긁어왔을 때만 해도 세상을 다 가진 기분이었습니다. “이제 매일 아침마다 협력업체 포털과 조달청 사이트에 들어가서 일일이 클릭하던 노가다는 끝났다!”라며 의기양양하게 실무에 적용해 보았죠.
그런데 실제 업무 사이트 주소를 넣고 엔터를 치는 순간 마주한 결과는 참담했습니다. 데이터는커녕 빈 괄호 []만 덩그러니 출력되거나, “로그인 후 이용해 주십시오”라는 텍스트만 잔뜩 긁혀 나왔기 때문입니다.
우리가 현업에서 다루는 대부분의 웹사이트는 아이디와 비밀번호를 쳐서 문을 열고 들어가야 하거나, 마우스로 특정 메뉴 버튼을 눌러야만 비로소 표가 화면에 나타나는 구조입니다. 열쇠도 없이 굳게 닫힌 문 앞에서 노크만 하고 있었으니 데이터가 나올 턱이 없었습니다. 이 보이지 않는 벽을 부수고 사람처럼 마우스를 움직여 데이터를 가져오게 만든 열쇠가 바로 셀레니움(Selenium)이었습니다.
40대 실무자가 마주한 벽과 파이썬 셀레니움 크롤링의 등장
기존의 크롤링 방식이 웹사이트의 ‘글자 뼈대(HTML)’만 번개처럼 낚아채 오는 것이라면, 셀레니움은 컴퓨터가 실제로 크롬 브라우저를 스스로 띄우는 방식입니다.
모니터에 투명 인간 비서가 하나 앉아있다고 상상해 보시면 이해가 쉽습니다. 이 가상의 비서는 내가 시키는 대로 브라우저를 켜고, 아이디 칸을 찾아 마우스로 클릭한 뒤, 비밀번호를 타이핑하고, 로그인 단추를 누릅니다. 그리고 화면에 우리가 원하는 데이터가 다 뜰 때까지 1~2초간 얌전히 기다렸다가 그 표를 통째로 긁어옵니다.
속도는 이전 방식보다 조금 느리지만, 사람이 눈으로 보면서 클릭하는 모든 동작을 100% 그대로 흉내 낼 수 있기 때문에 실무에서는 사실상 적수가 없는 최고의 무기입니다.
최신 환경에서 에러 없이 셀레니움 설치하기
인터넷에 돌아다니는 2~3년 전 강의를 보다 보면 “크롬 버전에 맞춰 크롬드라이버(chromedriver.exe)를 다운로드하고 경로를 맞춰라”라는 복잡한 설명이 나옵니다. 40대 비전공자에게는 시작부터 머리가 지끈거리는 장벽입니다.
하지만 지금은 파이썬이 알아서 내 크롬 버전에 맞는 부품을 자동으로 다운로드해 주는 편리한 세상이 되었습니다. VS Code 터미널 창에 딱 한 줄만 입력하시면 모든 준비가 끝납니다.
pip install selenium webdriver-manager
실무에서 바로 써먹는 파이썬 셀레니움 크롤링 기본 코드

아래 코드는 브라우저를 띄워 특정 사이트에 접속한 뒤, 검색창에 글자를 넣고 검색 버튼을 누르는 표준 자동화 뼈대입니다.
Python
import time
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from webdriver_manager.chrome import ChromeDriverManager
# 1. 크롬 브라우저 자동 실행 설정
options = webdriver.ChromeOptions()
# options.add_argument('--headless') # 화면을 띄우지 않고 몰래 실행하고 싶을 때 사용
driver = webdriver.Chrome(
service=Service(ChromeDriverManager().install()), options=options
)
try:
# 2. 이동하고자 하는 목표 웹사이트 접속
url = "https://www.google.com"
driver.get(url)
# 페이지가 완전히 뜰 때까지 2초 정도 숨 고르기
time.sleep(2)
# 3. 글자를 입력할 검색창(요소) 찾기
search_box = driver.find_element(By.NAME, "q")
# 4. 키보드로 글자 타이핑 후 전송
search_box.send_keys("파이썬 업무자동화")
search_box.submit()
print("검색이 성공적으로 실행되었습니다!")
time.sleep(3)
finally:
# 5. 작업이 끝나면 켜두었던 브라우저를 안전하게 종료
driver.quit()
이 파이썬 셀레니움 크롤링 코드를 처음 실행했을 때, 책상에 손도 대지 않았는데 모니터에 크롬 창이 스스로 팝업되더니 하얀 검색창에 글자가 또박또박 쳐지는 광경을 보며 전율이 돋았습니다.
내 손가락이 하던 일을 프로그램이 물리적으로 대신해 주는 순간, 실무 자동화의 영역이 컴퓨터 바탕화면을 넘어 인터넷 세상 전체로 넓어지는 것을 체감할 수 있었습니다.
현업에서 에러를 피하기 위한 2가지 핵심 생존 수칙
실제 업무 현장에서 파이썬 셀레니움 크롤링 작업을 진행하다 보면, 모니터 너머로 마주치는 돌발 변수들이 있습니다. 두 가지만 미리 기억해 두시면 수많은 야근을 피할 수 있습니다.
- 시간 지연(sleep)의 미학: 인터넷 속도가 느리거나 회사 서버가 버벅거릴 때, 페이지가 다 뜨기도 전에 파이썬이 버튼을 누르려고 하면
NoSuchElementException(해당 요소를 찾을 수 없음)이라는 에러가 터집니다. 초보자 단계에서는 동작 사이사이에time.sleep(2)처럼 넉넉하게 1~2초의 대기 시간을 끼워 넣어 주시는 것이 정신 건강에 가장 이롭습니다. - 아이디와 태그(Element) 식별법: 버튼이나 입력창을 집어낼 때는 크롬 창에서
F12를 눌러 해당 요소의ID나Class, 혹은 고유 주소인XPath를 찾아 지정해야 합니다. 브라우저 조작에 대한 더 정밀한 문법과 다양한 제어 방식이 궁금하시다면 셀레니움 공식 파이썬 문서를 틈틈이 정독해 보시는 것을 추천합니다.

글을 맺으며: 반복 업무는 기계에게, 판단은 사람에게
우리가 젊은 개발자들과 코딩 대회를 나가서 1등을 하려고 이 고생을 하는 것이 아닙니다.
침침한 눈을 비비며 매일 아침 웹사이트 대여섯 곳을 순회하고, 로그인하고, 마우스를 수십 번 클릭하느라 빼앗겼던 30분~1시간을 온전히 되찾기 위함입니다. 그 시간만 아껴도 현장의 긴급 민원을 한 번 더 점검하고, 팀원들과 따뜻한 모닝커피를 나누며 하루를 여유롭게 시작할 수 있습니다.
오늘 성공한 셀레니움 기술을 통해 인터넷 데이터를 긁어모았다면, 그다음 단계는 지난번에 다루었던 [파이썬 엑셀 필터링 데이터 추출] 방식을 연결하여 엑셀 대장으로 깔끔하게 정리하는 것입니다. 수집과 가공이 하나로 묶이는 순간 나만의 무인 데이터 공장이 완성됩니다.
오늘도 뻑뻑한 눈으로 모니터와 씨름하고 계신 대한민국 모든 40대 실무자 여러분의 칼퇴근을 진심으로 응원합니다.
