cheoly's language study blog

🐍 파이썬 자동화, 완전 정복! (4) - 웹 크롤링을 넘어선 브라우저 조작 자동화 (Selenium/Playwright)

프로그래밍/파이썬
반응형
SMALL

단순 크롤링은 이제 그만! 🤯 파이썬 자동화 스크립트를 시스템에 등록했다면, 이제 웹 조작 자동화의 최고봉인 Playwright를 배워보세요. Selenium을 넘어선 압도적인 속도와 안정성으로 로그인, 클릭, 데이터 입력 등 복잡한 웹 작업을 완벽하게 자동화하는 실전 가이드를 공개합니다. (키워드: 파이썬 자동화, 웹 조작, Playwright, 로그인 자동화)

파이썬 IDE 화면 중앙에 Playwright 코드가 실행 중이며, 배경에 흐릿한 Chrome 브라우저 창이 떠 있고, 미래적인 파란 선으로 커서가 'login' 버튼으로 자동 이동하는 모습. 파란색 P 로고와 파이썬 로고가 작게 배치되어 웹 브라우저 자동화를 상징함. 전체적으로 청록색 톤으로 기술적 안정감 강조.


🚀 4편. 웹 크롤링을 넘어선 브라우저 조작 자동화 (Selenium/Playwright)

📝 서론: 크롤링의 한계와 조작 자동화의 필요성

안녕하세요, cheoly입니다! 이전 3편에서는 파이썬 자동화 스크립트를 윈도우와 리눅스에 등록하여 주기적으로 실행하는 실전 가이드를 다뤘습니다. 이제 우리의 코드는 '정해진 시간에 알아서' 실행될 준비가 되었죠.

하지만 웹사이트를 다룰 때, 단순히 정적인 HTML 데이터를 긁어오는 **크롤링(Scraping)**만으로는 부족한 경우가 많습니다.

  • 로그인 페이지를 통과해야 하는 경우
  • 버튼을 클릭해야 새로운 데이터가 로딩되는 경우 (JavaScript 기반 웹사이트)
  • 특정 폼에 정보를 입력하고 '제출'해야 하는 경우

이럴 땐, 실제 사용자가 브라우저를 조작하는 것처럼 파이썬 코드가 대신 행동해야 합니다. 이것이 바로 브라우저 조작 자동화의 영역이며, 주로 Selenium이나 Playwright 같은 라이브러리를 사용합니다.


🛠️ 핵심 도구 소개: Selenium vs. Playwright

특징 Selenium (셀레니움) Playwright (플레이라이트)
등장 시기 2004년 (오래됨, 표준) 2020년 (비교적 최신, MS 주도)
속도 및 성능 상대적으로 느림 (WebDriver 프로토콜 사용) 매우 빠름 (개발자 도구 프로토콜 사용)
지원 브라우저 Chrome, Firefox, Edge, Safari 등 Chrome, Firefox, Safari (단일 API로 모두 제어)
비고 오랜 역사만큼 자료가 많아 입문이 쉽지만, 설정이 복잡할 수 있습니다. 설정이 간편하고 안정성이 높지만, 아직 Selenium만큼 자료가 많지는 않습니다. 최근 강력하게 추천되는 도구입니다.

이 시리즈에서는 최신 트렌드에 맞춰 더 빠르고 안정적인 Playwright를 사용해 보겠습니다.


💡 실전 가이드: Playwright 설치 및 기본 조작

1. 설치 및 브라우저 드라이버 설정

Playwright는 필요한 브라우저 드라이버까지 한 번에 설치해 줍니다.

Bash
 
# Playwright 설치
pip install playwright

# 필요한 브라우저 드라이버 설치 (Chromium, Firefox, WebKit)
playwright install

 

2. 기본 조작 코드: 특정 페이지 접속 후 검색 필드에 입력하기

우리의 목표는 브라우저를 열고, 특정 URL로 이동한 다음, 검색창에 텍스트를 입력하는 것입니다.

Python
 
from playwright.sync_api import sync_playwright

def run(playwright):
    # 1. 브라우저 실행 (headless=False로 설정하면 창이 눈앞에 보입니다)
    browser = playwright.chromium.launch(headless=False)
    page = browser.new_page()

    # 2. 특정 웹사이트 접속
    page.goto("[https://www.google.com](https://www.google.com)")
    print(f"현재 페이지 제목: {page.title()}")
    
    # 3. 입력 필드 찾기 및 텍스트 입력
    # Google 검색창은 일반적으로 name="q" 속성을 가집니다.
    search_box_selector = 'textarea[name="q"]' 
    
    # 입력 대기 (요소가 나타날 때까지 기다림)
    page.wait_for_selector(search_box_selector)
    
    # '파이썬 자동화' 입력
    page.fill(search_box_selector, "파이썬 자동화")
    
    # 4. 엔터 키를 눌러 검색 실행
    page.press(search_box_selector, "Enter")

    # 5. 검색 결과 페이지 확인 (5초 대기)
    page.wait_for_timeout(5000)

    # 6. 브라우저 종료
    browser.close()

with sync_playwright() as playwright:
    run(playwright)

[주의] page.wait_for_timeout(5000)은 디버깅용이며, 실제 운영에서는 특정 요소가 로딩되기를 기다리는 page.wait_for_selector()나 page.wait_for_url() 등을 사용해야 안정적입니다.


💡 심화: 로그인 처리와 Headless 모드

1. 클릭 자동화

특정 버튼을 찾아 클릭하는 것은 자동화의 기본입니다.

Python
 
# '로그인' 버튼을 텍스트로 찾아서 클릭
page.click("text=로그인") 

2. Headless 모드 (가장 중요!)

작업 스케줄러에 등록하여 서버나 백그라운드에서 스크립트를 실행할 때는 브라우저 창이 뜨지 않도록 해야 합니다. 이를 Headless 모드라고 합니다.

위 코드에서 browser = playwright.chromium.launch(headless=False) 부분을 browser = playwright.chromium.launch(**headless=True**)로 변경하면, 브라우저 창이 보이지 않은 채 백그라운드에서 모든 작업이 처리됩니다.


🎁 결론 및 다음 예고

브라우저 조작 자동화는 단순 크롤링을 넘어 실제 업무 환경에서 가장 높은 효율을 낼 수 있는 기술입니다. 로그인, 복잡한 데이터 입력/제출 등 이제 여러분의 파이썬 스크립트가 웹사이트와 완벽하게 상호작용할 수 있게 되었습니다.

다음 5편에서는 이 기술을 활용하여 **"퇴근 후 파일 정리부터 보고서 작성까지 (엑셀/PDF/이메일)"**라는 주제로, 가장 현실적이고 실용적인 업무 문서 자동화를 다뤄보겠습니다. 기대해주세요!

반응형
LIST

💻 파이썬 자동화, 완전 정복! (3) - 윈도우/리눅스 작업 스케줄러 등록 실전 가이드

프로그래밍/파이썬
반응형
SMALL

파이썬 자동화 스크립트를 윈도우 작업 스케줄러 또는 리눅스 크론탭에 등록하여 손이 필요 없는 완전 자동화 시스템을 구축하는 실전 가이드. 스크립트 실행 오류 없이 성공하는 절대 경로 설정 노하우를 지금 확인하세요!

파이썬 로고를 중심으로 톱니바퀴 회로가 펼쳐져 있고, 왼쪽에는 윈도우 작업 스케줄러(Windows Task Scheduler) 화면과 로봇 팔, 오른쪽에는 리눅스 크론탭(crontab -e) 터미널 화면이 보입니다. 도시 배경 위에 '파이썬 자동화, 완전 정복! (3) - 윈도우/리눅스 작업 스케줄러 등록 실전 가이드'라는 제목이 하단에 있습니다.

안녕하세요, Cheoly입니다. 👋 지난 시간까지 우리는 파이썬을 이용해 반복적인 작업을 효율적으로 자동화하는 방법을 배웠습니다. 이제 마지막 단계입니다! 아무리 훌륭한 자동화 스크립트라도, 매번 수동으로 실행해야 한다면 '완전한 자동화'라고 할 수 없겠죠?

이번 글에서는 여러분이 만든 파이썬 자동화 스크립트를 운영체제(OS)의 스케줄러에 등록하여 손이 전혀 가지 않는 완전 자동화 시스템을 구축하는 실전 노하우를 공유하겠습니다.


1. 📂 스크립트 실행 환경 준비: 가장 중요한 첫 단계

작업 스케줄러는 단순히 명령어를 실행해주는 도구일 뿐입니다. 스케줄러가 여러분의 파이썬 스크립트를 올바르게 찾고 실행할 수 있도록 환경을 설정하는 것이 핵심입니다.

A. 스크립트 파일 경로 확인 및 격리

  1. 실행 파일 경로 확인: 스크립트 파일(예: automated_script.py)이 어디에 있는지 정확히 확인하고, 가능한 한 경로에 한글이나 특수 문자가 없는 곳(예: C:\Automation\scripts 또는 ~/automation/scripts)에 두는 것이 좋습니다.
  2. 가상 환경 (Virtual Environment) 사용: 스크립트가 pandasrequests 같은 외부 라이브러리를 사용한다면, 해당 라이브러리들이 설치된 가상 환경을 통해 실행해야 합니다. 스케줄러는 일반적인 터미널 환경과 다르기 때문에 가상 환경의 python 실행 파일을 직접 지정해야 합니다.

B. 절대 경로 사용으로 오류 방지

스크립트 내에서 파일을 읽거나 쓰는 작업이 있다면, 해당 파일 경로를 절대 경로로 지정해야 합니다. 작업 스케줄러가 스크립트를 실행할 때의 '현재 작업 디렉토리'는 여러분이 예상하는 곳과 다를 수 있기 때문입니다.


2. 🛡️ 윈도우 환경: 작업 스케줄러 (Task Scheduler) 활용

윈도우 환경에서는 Windows 작업 스케줄러를 사용하여 파이썬 스크립트를 등록합니다. 설정이 다소 복잡해 보일 수 있지만, 다음 세 가지만 정확히 입력하면 됩니다.

📝 설정 단계

  1. 작업 스케줄러 실행: 윈도우 검색창에서 '작업 스케줄러'를 검색하여 실행합니다.
  2. 기본 작업 만들기: 오른쪽 메뉴에서 '기본 작업 만들기...'를 클릭하고 작업 이름을 지정합니다 (예: Python Daily Reporter).
  3. 트리거 설정: 스크립트를 언제 실행할지 설정합니다 (매일, 매주, 한 번만 등).
  4. 동작 설정 (가장 중요!): '프로그램 시작'을 선택하고 다음 세 항목을 정확히 입력합니다.
항목 입력 내용 예시 (가상환경 사용 시) 설명
프로그램/스크립트 파이썬 인터프리터 실행 파일의 전체 경로 C:\Users\User\venv\Scripts\python.exe 스크립트를 실행할 python.exe 파일의 경로 (가상 환경 내의 Scripts 폴더에 있음)
인수 추가 (선택 사항) 실행할 파이썬 스크립트 파일의 전체 경로 C:\Automation\scripts\automated_script.py 실행할 .py 파일의 전체 경로
시작 위치 (선택 사항) python.exe 파일이 있는 디렉토리 C:\Users\User\venv\Scripts python.exe 파일의 위치를 다시 한번 지정하여 오류 방지

💡 Tip: 만약 스크립트 실행 후 콘솔 창이 깜박이는 것을 원치 않는다면, .py 대신 .vbs 파일을 이용해 pythonw.exe로 실행하거나, 별도의 .bat 파일로 감싸는 방법도 고려할 수 있습니다.


3. 🐧 리눅스/macOS 환경: 크론탭 (Crontab) 활용

리눅스 및 macOS 환경에서는 강력하고 간단한 스케줄링 도구인 크론탭 (crontab)을 사용합니다.

📝 크론탭 등록 단계

  1. 크론 편집기 열기: 터미널에서 다음 명령어를 입력합니다.
  2. crontab -e
  3. 크론 규칙 작성: 파일 맨 아래에 실행 규칙을 추가합니다. 크론 규칙은 5개의 시간 필드실행할 명령어로 구성됩니다.
분 (0-59) 시 (0-23) 일 (1-31) 월 (1-12) 요일 (0-7) 실행 명령어
30 09 * * 1-5 /usr/bin/python3 /home/user/scripts/automated_script.py > /tmp/cron_log.log 2>&1

위 예시의 의미: 월요일부터 금요일까지 오전 9시 30분에 스크립트를 실행합니다.

💡 가상 환경 사용 시 유의사항

크론은 환경 변수가 제한적이므로, 반드시 전체 경로를 사용해야 합니다.

  • 파이썬 실행 경로 확인: which python 또는 which python3 명령어로 시스템 python 경로를 확인합니다.
  • 가상 환경 사용 시: 가상 환경의 python 실행 파일 경로를 직접 지정해야 합니다. /home/user/my_venv/bin/python 형태로 사용하세요.
  • 로그 기록: > /tmp/cron_log.log 2>&1을 추가하여 실행 결과를 로그 파일에 기록하면, 스케줄러가 제대로 작동하는지 확인하고 오류 발생 시 디버깅하는 데 큰 도움이 됩니다.

🛠️ 마무리 및 테스트: 자동화 시스템의 완성

등록을 완료했다면, 반드시 설정한 시간이 오기 전에 수동으로 명령어를 한 번 실행해보거나, 임시로 시간을 현재로부터 몇 분 뒤로 설정하여 작동 여부를 테스트해봐야 합니다.

파이썬 자동화 스크립트OS의 작업 스케줄러에 등록하는 것은 여러분의 자동화 여정의 마침표이자, 진정한 완전 자동화 시스템을 구축하는 성공적인 발판이 될 것입니다!

궁금한 점이 있다면 언제든지 댓글로 남겨주세요! 다음 글에서 또 만나요!

반응형
LIST

🐍 [cheoly의 확장] C++ 엔지니어, 파이썬으로 '개발 업무 자동화' 시작하기 (파일/데이터 처리 실전 가이드)

프로그래밍/파이썬
반응형
SMALL

[cheoly's Insight]

**C++**의 강력한 성능이 필요 없는 단순 반복 작업(로그 분석, 설정 파일 파싱, 데이터 정리)에 귀중한 시간을 낭비해서는 안 됩니다. 파이썬은 C++ 엔지니어의 생산성을 10배 이상 높여주는 최고의 자동화 도구입니다. 이 글은 복잡한 반복 작업을 파이썬 스크립트 한 줄로 끝내는 실전 가이드입니다.

파이썬 로고와 스케줄링 코드 창이 톱니바퀴와 시계 태엽에 연결되어 자동화된 작업을 실행하는 기술 컨셉 이미지.

 

안녕하세요, IT 엔지니어 cheoly입니다.

C++로 시스템의 핵심 로직을 짜는 엔지니어일수록, 부가적인 단순 반복 작업에 드는 시간을 줄여야 합니다. 40대 경력 개발자에게 시간은 곧 생산성이자 가치입니다. 파이썬은 이러한 반복 업무를 단 몇 줄의 코드로 해결하여 C++ 엔지니어의 업무 자동화를 현실로 만들어 줍니다.

이 글에서는 C++ 엔지니어들이 가장 흔히 겪는 파일 및 데이터 처리 작업을 파이썬으로 자동화하는 실전 전략을 제시합니다.


1. ⚙️ C++ 엔지니어가 파이썬 자동화를 시작해야 하는 이유

파이썬은 C++에 비해 속도는 느리지만, 개발 속도와 범용성에서는 압도적인 효율을 제공합니다.

작업 유형 C++ 방식 (High-Performance) Python 방식 (High-Productivity)
로그 파일 파싱 fstream을 이용한 수동 파일 읽기 및 문자열 처리 로직 작성 re 모듈(정규표현식) 또는 **pandas**로 수백 줄의 데이터를 단 몇 줄로 처리
설정 파일 관리 XML/INI 파서 라이브러리 직접 통합 및 빌드 json, yaml 라이브러리로 즉시 데이터 구조화
OS 자동화 WinAPI/POSIX 기반으로 OS 호출 코드 작성 os, shutil 모듈로 파일 복사, 이동, 디렉터리 정리 등 즉시 구현

⭐ 핵심: 파이썬은 **'Glue Language'**로서, 복잡한 C++ 컴포넌트들을 연결하고 데이터를 쉽게 처리하는 경계선 작업에 최적화되어 있습니다.


2. 📁 실전 자동화 1: 로그 파일에서 원하는 데이터 추출하기

시스템 디버깅 및 분석 시 필수적인 로그 파일 처리 작업을 파이썬으로 자동화합니다.

🔑 정규 표현식(re 모듈)을 이용한 키워드 추출

수백만 줄의 로그 파일에서 특정 패턴(예: 에러 코드, 사용자 ID, 타임스탬프)을 가진 줄만 추출해야 할 때 유용합니다.

Python
 
import re

log_file_path = 'system_error.log'
# 'ERROR' 키워드와 함께 타임스탬프([YYYY-MM-DD HH:MM:SS])가 포함된 줄을 찾는 패턴
pattern = r'\[\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}\].*ERROR'

with open(log_file_path, 'r') as f:
    for line in f:
        # 패턴에 매칭되는 줄만 출력
        if re.search(pattern, line):
            print(line.strip())

C++ 대비 효율: C++에서 std::string::find와 복잡한 인덱싱 로직을 구현할 필요 없이, 파이썬의 re 모듈로 즉시 패턴 검색 자동화가 가능합니다.


3. 📊 실전 자동화 2: 설정 및 데이터 파일을 구조화하기

C++ 시스템에서 JSON이나 YAML 같은 파일로 설정값을 관리하는 경우가 많습니다. 파이썬은 이 구조를 즉시 파싱하여 활용할 수 있습니다.

🔑 JSON 파일을 Dictionary 객체로 즉시 변환

API 통신 또는 설정 파일로 흔히 사용되는 JSON 데이터를 파이썬 Dictionary 객체로 쉽게 다룰 수 있습니다.

Python
 
import json

config_path = 'system_config.json'

with open(config_path, 'r') as f:
    config_data = json.load(f) # JSON 파일이 즉시 파이썬 딕셔너리로 변환됨

# 특정 설정값 접근 자동화
timeout = config_data.get('network', {}).get('timeout_sec', 10)
print(f"현재 네트워크 타임아웃 설정값: {timeout}초")

# C++ 코드에 전달할 데이터 구조화 등 후처리 자동화 가능

C++ 대비 효율: JSON 파싱을 위해 무거운 라이브러리를 빌드하거나 복잡한 파서를 구현할 필요 없이, 내장 json 모듈로 단 두 줄만에 데이터 처리가 끝납니다.


4. 🚀 실전 자동화 3: OS 레벨의 파일/디렉터리 정리 및 관리

개발 환경에서 생성된 임시 파일, 빌드 잔여물, 백업 파일 등을 자동으로 정리하고 관리하는 스크립트를 만듭니다.

🔑 shutil과 os 모듈을 이용한 클린업 스크립트

특정 디렉터리의 .bak 파일을 찾아 다른 곳으로 옮기거나 삭제하는 자동화 스크립트입니다.

Python
 
import os
import shutil
from datetime import datetime, timedelta

def cleanup_old_files(target_dir, days_old=30):
    now = datetime.now()
    cutoff_date = now - timedelta(days=days_old)
    
    for filename in os.listdir(target_dir):
        file_path = os.path.join(target_dir, filename)
        
        # 30일 이상 지난 파일만 처리
        if os.path.isfile(file_path) and datetime.fromtimestamp(os.path.getmtime(file_path)) < cutoff_date:
            print(f"30일 경과 파일 삭제: {filename}")
            os.remove(file_path) # 실제 삭제 실행
            
# 예시: 'log_archive' 폴더의 30일 지난 파일 정리 자동화
cleanup_old_files('D:/Project/log_archive', 30)

C++ 대비 효율: 파일 생성 시간, 파일 검색, 경로 조작 등 OS 의존적인 작업들이 파이썬 내장 모듈로 깔끔하게 처리되어 운영 환경의 이식성까지 높일 수 있습니다.


📝 cheoly의 최종 조언: 파이썬은 '생산성 무기'

C++가 시스템의 엔진이라면, 파이썬은 그 엔진 주변의 모든 잡무를 처리하는 도구입니다. 파이썬을 익히는 것은 C++ 경력 엔지니어가 시스템의 핵심 로직에 더 많은 시간을 투자하여 자신의 가치와 연봉을 높이는 가장 효율적인 방법입니다.

다음 콘텐츠에서는 이 파이썬 자동화 스크립트를 **윈도우 작업 스케줄러(혹은 리눅스 크론탭)**에 등록하여 완전 자동화 시스템을 구축하는 실전 가이드를 다루겠습니다

반응형
LIST