🐍 파이썬 Selenium으로 스크린샷 자동 수집과 페이지 소스 저장하기
📌 성공 실패 여부에 따라 자동 캡처하고 로깅까지 완벽하게 설정하는 방법
웹 자동화 작업을 하다 보면 테스트가 성공했을 때와 실패했을 때의 화면을 기록으로 남기고 싶을 때가 많습니다.
특히 크롤링이나 UI 테스트 환경에서는 나중에 문제를 추적하거나 결과를 보고서 형태로 정리할 때 스크린샷과 페이지 소스가 큰 도움이 됩니다.
이 과정을 수동으로 한다면 번거롭지만, 파이썬 Selenium을 활용하면 자동으로 처리할 수 있습니다.
이번 글에서는 Selenium을 이용해 성공과 실패 상황에서 자동으로 스크린샷을 저장하고, 동시에 페이지 소스까지 기록으로 남기는 방법을 다룹니다.
실무에서 자주 활용할 수 있는 로거(Logger) 패턴을 통해 더욱 체계적으로 관리할 수 있는 팁까지 함께 알려드리겠습니다.
이 글에서는 기초부터 차근차근 따라 할 수 있는 예제 코드를 통해 원리를 이해할 수 있도록 구성했습니다.
자동화 테스트 보고서를 꾸준히 작성하는 개발자뿐만 아니라, 웹 데이터 수집을 하는 분들에게도 유용하게 적용할 수 있을 것입니다.
또한 코드 실행 시 발생할 수 있는 예외 상황까지 고려해 안정적인 로깅을 설정하는 방법을 확인할 수 있습니다.
이제 목차를 보면서 어떤 흐름으로 진행되는지 살펴보겠습니다.
📋 목차
🔗 Selenium 기본 환경 설정하기
자동화 테스트를 시작하기 위해서는 가장 먼저 Selenium 환경을 올바르게 세팅해야 합니다.
파이썬에서 Selenium을 사용하려면 먼저 라이브러리를 설치하고, 원하는 브라우저에 맞는 드라이버를 준비해야 합니다.
예를 들어 크롬 브라우저를 사용하는 경우 ChromeDriver를 설치해야 하며, 브라우저 버전과 드라이버 버전이 일치해야 정상적으로 동작합니다.
환경 설정 단계에서 버전 불일치로 인한 오류가 가장 많이 발생하므로 주의가 필요합니다.
설치를 마친 뒤에는 Python 코드에서 드라이버를 호출하여 브라우저를 열 수 있습니다.
기본적인 실행 코드 구조는 아래와 같습니다.
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
# 크롬 드라이버 서비스 지정
service = Service("chromedriver.exe")
driver = webdriver.Chrome(service=service)
# 웹사이트 접속
driver.get("https://example.com")
위 코드처럼 드라이버 객체를 생성하면 Selenium이 브라우저를 자동으로 실행합니다.
이후에는 원하는 요소를 찾고 조작할 수 있으며, 테스트나 크롤링을 수행하는 기반이 됩니다.
특히 By 모듈을 활용하면 CSS 선택자, XPath, 태그 이름 등 다양한 방식으로 요소를 탐색할 수 있습니다.
💡 TIP: 브라우저 드라이버를 직접 다운로드하는 대신 webdriver_manager 라이브러리를 사용하면 버전 관리가 자동으로 이루어져 훨씬 편리합니다.
이처럼 기본 환경을 안정적으로 세팅해야 이후 단계에서 스크린샷 저장이나 페이지 소스 로깅 기능을 추가할 때 불필요한 오류를 줄일 수 있습니다.
이제 환경 준비가 끝났다면 실제 스크린샷을 자동으로 저장하는 기능을 구현해 보겠습니다.
🛠️ 스크린샷 자동 저장 구현하기
테스트 자동화를 실행하다 보면 특정 상황에서 화면을 저장해 두는 것이 큰 도움이 됩니다.
예를 들어 로그인 과정에서 에러가 발생하거나 버튼 클릭 후 원하는 페이지로 이동했는지 확인하고 싶을 때 스크린샷을 남기면 문제를 빠르게 추적할 수 있습니다.
Selenium은 기본적으로 save_screenshot() 메서드를 제공하여 간단하게 화면을 이미지 파일로 저장할 수 있습니다.
try:
driver.get("https://example.com/login")
# 로그인 로직 수행
driver.save_screenshot("success.png")
except Exception as e:
driver.save_screenshot("error.png")
print("에러 발생:", e)
위 예제에서는 성공적으로 페이지에 접근했을 때 success.png라는 파일로 저장되고,
오류가 발생하면 error.png 파일로 따로 기록됩니다.
이처럼 성공과 실패를 구분하여 관리하면 결과를 한눈에 파악하기 좋습니다.
💎 핵심 포인트:
스크린샷 파일은 테스트 케이스 이름이나 실행 시간(timestamp)을 포함해 저장하면,
여러 테스트를 동시에 수행할 때 파일명이 겹치지 않아 관리가 편리합니다.
실무에서는 보통 로그 폴더를 만들어 실행 결과에 따라 스크린샷을 자동 분류하는 방식을 많이 사용합니다.
예를 들어 성공 이미지는 success 폴더, 실패 이미지는 failure 폴더로 저장하는 구조입니다.
- 🖼️파일명에 날짜와 시간 포함하기
- 📂성공과 실패를 별도 디렉터리로 분리
- 🔍실패 스크린샷은 테스트 리포트에 첨부
이제 화면 캡처를 안정적으로 저장하는 방법을 알았으니,
다음 단계에서는 페이지의 전체 HTML 소스를 저장하는 방법을 알아보겠습니다.
⚙️ 페이지 소스 파일로 남기는 방법
화면을 이미지로 저장하는 것과 더불어, HTML 페이지의 전체 소스를 남겨 두면 훨씬 더 강력한 디버깅이 가능합니다.
스크린샷은 눈으로 확인할 수 있는 결과물이지만, 페이지 소스는 실제로 어떤 요소가 로딩되었는지를 확인할 수 있기 때문에 DOM 분석이나 오류 추적에 유용합니다.
Selenium 드라이버는 현재 페이지의 HTML을 page_source 속성을 통해 제공합니다.
이 내용을 파일로 저장하면 실행 당시의 페이지 구조를 그대로 보관할 수 있습니다.
html_source = driver.page_source
with open("page_source.html", "w", encoding="utf-8") as f:
f.write(html_source)
위 코드처럼 간단히 page_source를 불러와 파일로 저장하면,
브라우저 화면에 표시된 HTML 문서 전체를 그대로 기록할 수 있습니다.
이 방식은 특히 JavaScript 렌더링이 필요한 동적 페이지에서도 활용할 수 있어,
단순한 요청 기반 크롤링보다 훨씬 정확한 결과를 얻을 수 있습니다.
💡 TIP: 테스트 과정에서 실패한 케이스의 스크린샷과 페이지 소스를 함께 저장하면, 화면에 보이지 않는 숨겨진 오류도 파악할 수 있습니다.
또한 페이지 소스는 자동화 로그 시스템과 연동해 저장할 수 있습니다.
예를 들어 실패 시 자동으로 특정 폴더에 저장하도록 설정하면,
나중에 에러 상황을 재현하지 않고도 당시의 DOM 상태를 확인할 수 있어 디버깅 시간을 크게 줄일 수 있습니다.
💬 스크린샷과 페이지 소스를 함께 관리하는 것은 자동화 테스트 품질을 높이고, 문제 발생 시 원인을 빠르게 추적할 수 있는 가장 확실한 방법입니다.
이제 화면 이미지와 페이지 소스를 모두 저장할 수 있게 되었으니,
다음 단계에서는 이를 성공/실패 여부에 따라 자동 분류하고 기록하는 로거(Logger) 설정법을 알아보겠습니다.
🔌 성공 실패 여부에 따른 로거 설정
자동화 작업에서 중요한 것은 단순히 스크린샷과 페이지 소스를 저장하는 것뿐 아니라, 이를 체계적으로 기록하는 것입니다.
파이썬의 logging 모듈을 활용하면 테스트의 성공과 실패를 구분해 자동으로 로그를 남기고, 그에 맞춰 스크린샷과 페이지 소스를 함께 저장할 수 있습니다.
아래 예제는 성공/실패 상황에 맞게 별도의 폴더에 파일을 저장하고, 동시에 로그 메시지를 기록하는 구조를 보여줍니다.
import logging, os, time
from selenium import webdriver
# 로그 설정
logging.basicConfig(filename="test.log", level=logging.INFO)
timestamp = time.strftime("%Y%m%d_%H%M%S")
driver = webdriver.Chrome()
try:
driver.get("https://example.com")
driver.save_screenshot(f"logs/success_{timestamp}.png")
with open(f"logs/success_{timestamp}.html", "w", encoding="utf-8") as f:
f.write(driver.page_source)
logging.info("테스트 성공 - %s", timestamp)
except Exception as e:
driver.save_screenshot(f"logs/failure_{timestamp}.png")
with open(f"logs/failure_{timestamp}.html", "w", encoding="utf-8") as f:
f.write(driver.page_source)
logging.error("테스트 실패 - %s, 에러: %s", timestamp, e)
finally:
driver.quit()
위 코드에서는 실행 시간(timestamp)을 기반으로 파일명을 생성해 저장합니다.
성공 시에는 success_날짜시간 형식으로 저장되며, 실패 시에는 failure_날짜시간 형식으로 별도 관리됩니다.
이렇게 하면 파일명이 겹치지 않고, 로그 파일(test.log)에서도 해당 시점의 실행 결과를 바로 확인할 수 있습니다.
⚠️ 주의: 로그 파일과 캡처 파일을 저장할 경로가 미리 생성되어 있어야 합니다.
폴더가 없을 경우 os.makedirs()로 디렉토리를 생성하는 코드를 추가하세요.
로거를 활용하면 단순한 테스트 기록을 넘어서, 나중에 실행 결과를 재현하고 오류를 분석하는 데 큰 도움이 됩니다.
특히 협업 환경에서는 로그와 결과 파일을 공유하여 문제 해결 속도를 높일 수 있습니다.
💡 실무에서 활용할 수 있는 응용 팁
기본적인 스크린샷과 페이지 소스 저장 기능만으로도 충분히 유용하지만, 실무에서는 이를 한 단계 더 발전시켜 활용할 수 있습니다.
테스트 자동화 환경에서는 파일 관리와 리포트 연동이 중요하며, 다양한 라이브러리와 결합해 생산성을 높일 수 있습니다.
📊 테스트 리포트와 연동하기
테스트 자동화 도구인 pytest와 함께 사용할 경우, 스크린샷과 HTML 소스를 리포트에 첨부하면 테스트 결과를 더욱 직관적으로 확인할 수 있습니다.
실패한 테스트 케이스마다 관련 파일이 자동으로 첨부된다면 QA 과정이 훨씬 수월해집니다.
☁️ 클라우드 저장소와 연계
스크린샷과 로그 파일을 로컬에만 저장하는 대신 AWS S3, Google Cloud Storage 같은 클라우드 저장소와 연동하면 협업 팀원들과 손쉽게 공유할 수 있습니다.
CI/CD 파이프라인에 포함시켜 테스트 실행 결과를 자동으로 업로드하면 지속적인 품질 관리에 유리합니다.
🕒 파일 관리와 자동 삭제
시간이 지날수록 스크린샷과 페이지 소스 파일이 쌓이면 저장 공간을 많이 차지하게 됩니다.
따라서 일정 기간이 지난 파일은 자동으로 삭제하거나, 최근 몇 회차 실행 결과만 유지하는 방식으로 관리하는 것이 좋습니다.
- 📂테스트 결과를 리포트와 연결
- ☁️클라우드 스토리지 자동 업로드
- 🧹자동 정리 스크립트로 오래된 파일 삭제
이처럼 기본 기능에 응용 팁을 더하면 단순한 화면 기록을 넘어서 체계적인 테스트 자산을 구축할 수 있습니다.
이제 마지막으로 독자들이 자주 궁금해하는 질문들을 정리한 FAQ를 확인해 보겠습니다.
❓ 자주 묻는 질문 (FAQ)
Selenium을 사용할 때 꼭 크롬 브라우저만 필요한가요?
스크린샷 저장 경로를 지정할 수 있나요?
실패했을 때만 스크린샷을 찍도록 설정할 수 있나요?
페이지 소스 저장은 모든 동적 요소도 포함하나요?
로그 파일 크기가 너무 커지면 어떻게 관리해야 하나요?
여러 개의 테스트를 동시에 실행할 때 충돌이 발생하지 않나요?
CI/CD 환경에서도 동일하게 적용할 수 있나요?
webdriver_manager를 쓰면 드라이버 설치를 건너뛸 수 있나요?
✅ 파이썬 Selenium 자동화 기록 정리
이번 글에서는 파이썬 Selenium을 활용해 자동화 작업 시 유용하게 사용할 수 있는 스크린샷 저장과 페이지 소스 기록 기능을 살펴보았습니다.
단순히 화면을 캡처하는 수준을 넘어, 성공과 실패 여부에 따라 결과를 분류하고 로그까지 남기면 테스트 품질 관리가 훨씬 쉬워집니다.
또한 pytest 리포트 연동, 클라우드 업로드, 자동 파일 정리 등 실무에서 활용할 수 있는 다양한 응용 팁을 함께 적용하면 자동화 시스템의 효율성이 크게 향상됩니다.
Selenium은 단순한 테스트 도구를 넘어, 웹 크롤링과 품질 관리, CI/CD 파이프라인까지 확장해 사용할 수 있는 강력한 프레임워크입니다.
특히 스크린샷과 페이지 소스를 기록하는 로거 패턴은 문제 상황을 빠르게 추적하고, 협업 과정에서 결과를 공유하는 데 매우 유용합니다.
앞으로 자동화 테스트나 웹 데이터 수집을 계획한다면 오늘 다룬 기능들을 꼭 활용해 보시길 권장합니다.
🏷️ 관련 태그 : 파이썬자동화, 셀레니움, 웹테스트, 스크린샷저장, 페이지소스, 로깅, 크롤링, 테스트자동화, QA도구, CI연동