웹 자동화는 이제 현대 소프트웨어 개발 및 테스트에 없어서는 안 될 도구입니다. 이 포괄적인 Selenium Python 튜토리얼에서는 실제 시나리오를 처리할 수 있는 강력한 웹 자동화 프레임워크를 구축하는 방법을 배웁니다. Python에서 자동화된 테스트를 구현하거나 복잡한 웹 스크래핑 자동화 솔루션을 만드는 데 관심이 있는 경우 이 가이드는 업계에서 테스트된 접근 방식과 Selenium 모범 사례를 제공합니다.
웹 자동화 기초 이해
웹 자동화는 최신 소프트웨어 개발, 테스트 및 데이터 수집에 필수적입니다. 해당 애플리케이션은 웹 애플리케이션의 엔드투엔드 테스트부터 양식 제출 또는 웹 스크래핑과 같은 반복적인 워크플로 단순화에 이르기까지 다양합니다. Selenium WebDriver Python 통합은 강력한 기능을 제공하지만 강력한 웹 자동화는 사용자 상호 작용을 모방하는 스크립트를 작성하는 것 이상입니다. 유지 관리 및 적응이 가능하며 대상 웹 애플리케이션의 변경 사항에 탄력적으로 대처할 수 있는 워크플로와 프레임워크를 설계하는 것입니다.
다음은 이 튜토리얼 전체에서 다룰 주요 측면입니다.
- 적절한 로케이터 선택(XPath, CSS 등)
- 동적 요소 및 상태 로딩
- 재시도 메커니즘 구현
- 브라우저 세션을 적절하게 관리하기
- 유지관리 가능한 코드 구조
Selenium 모범 사례를 준수하면서 이러한 개념을 보여주기 위해 Books to Scrape를 데모 사이트로 사용하여 전자 상거래 웹사이트의 가격 추적기를 위한 웹 스크래핑 자동화 프로젝트를 구축할 것입니다.
전제 조건
이 튜토리얼을 진행하려면 다음이 필요합니다.
- 컴퓨터에 Python 3.x가 설치되어 있습니다.
- Python 프로그래밍에 대한 기본 지식
- Selenium을 이용한 웹 스크래핑 기본 지식
이 튜토리얼의 코드는 Github 저장소에서 확인할 수 있습니다. 따라하려면 자유롭게 복제하세요.
개발 환경 설정
적절한 개발 환경을 설정하고 필요한 Python 패키지를 설치해 보겠습니다. 먼저 아래 명령을 실행하여 프로젝트 폴더와 새로운 가상 환경을 생성합니다.
mkdir price_tracker_automation && cd price_tracker_automation python3 -m venv env source env/bin/activate
그런 다음 다음 Python 패키지를 생성하여 요구사항.txt 파일에 추가하세요.
selenium==4.16.0 webdriver-manager==4.0.1 python-dotenv==1.0.0 requests==2.31.0
위 코드에서는 핵심 종속성을 정의했습니다. Selenium 패키지는 웹 자동화 프레임워크의 기반을 제공하는 반면 webdriver-manager는 브라우저 드라이버 관리를 자동으로 처리합니다. python-dotenv 패키지는 환경 구성용이고, 요청 패키지는 HTTP 요청 처리용입니다.
이제 아래 명령을 실행하여 요구사항.txt 파일에 있는 모든 Python 패키지를 설치하려면 아래 명령을 실행하세요.
pip install -r requirements.txt
마지막으로 프로젝트에 대해 다음 폴더 구조를 만듭니다.
mkdir price_tracker_automation && cd price_tracker_automation python3 -m venv env source env/bin/activate
여기서 우리는 소프트웨어 엔지니어링 모범 사례에 따라 모듈식 프로젝트 구조를 구축합니다. core 디렉토리에는 기본 자동화 구성 요소가 포함되어 있고 database는 데이터 지속성을 처리합니다.
가격 추적 도구 구축
생성된 프로젝트 환경, 종속성, 폴더 구조를 바탕으로 Selenium과 Python을 사용하여 가격 추적기 자동화 도구 구축을 진행해 보겠습니다.
브라우저 관리 시스템 구현
브라우저 관리 시스템을 구현해 보겠습니다. 이는 안정적인 Selenium WebDriver Python 통합을 위한 중요한 구성 요소입니다. core/browser.py 파일에 아래 코드 조각을 추가하세요.
selenium==4.16.0 webdriver-manager==4.0.1 python-dotenv==1.0.0 requests==2.31.0
위 코드는 WebDriver 초기화 및 구성을 처리하는 BrowserManager 클래스를 생성합니다. 이 수업에서는 안정성과 성능을 위해 Chrome 옵션을 구성하여 Selenium 모범 사례를 구현합니다. 헤드리스 매개변수를 사용하면 브라우저 창을 표시하지 않고도 테스트를 실행할 수 있으며 이는 CI/CD 파이프라인에 매우 중요합니다.
이제 핵심 브라우저 관리 기능을 구현하려면 BrowserManager 클래스에 다음 메서드를 추가하세요.
pip install -r requirements.txt
위 코드에서 start_browser 메소드는 webdriver-manager를 활용하여 드라이버 설치 및 업데이트를 자동으로 처리하고 close_browser는 적절한 리소스 정리를 보장합니다. 구현에는 동적 페이지 로딩을 적절하게 처리하기 위한 암시적 대기 구성이 포함됩니다.
요소 핸들러 생성
다음으로 요소 상호 작용 시스템을 구현해 보겠습니다. 이는 Selenium의 모범 사례를 따르면서 안정적인 방식으로 요소를 감지하고 상호 작용할 수 있게 해주기 때문에 모든 웹 자동화 프레임워크에서 중요합니다. core/element_handler.py에 코드 조각을 추가하세요
price_tracker_automation/ ├── core/ │ ├── browser.py | ├── scraper.py │ └── element_handler.py ├── database/ │ └── db_manager.py ├── notifications/ | └── price_alert.py ├── requirements.txt ├── run.py └── main.py
위 코드에서는 Selenium WebDriver Python 상호 작용 패턴을 캡슐화하는 ElementHandler 클래스를 만들었습니다. 이 클래스는 WebDriver 인스턴스와 구성 가능한 시간 초과 매개변수를 허용합니다.
핵심 요소 상호 작용 방법을 추가하려면 ElementHandler 클래스를 업데이트하세요.
from selenium import webdriver from selenium.webdriver.chrome.service import Service from selenium.webdriver.support import expected_conditions as EC import logging class BrowserManager: def __init__(self, headless=False): self.options = webdriver.ChromeOptions() if headless: self.options.add_argument('--headless') # Add additional stability options self.options.add_argument('--no-sandbox') self.options.add_argument('--disable-dev-shm-usage') self.options.add_argument('--disable-gpu') self.driver = None self.logger = logging.getLogger(__name__)
위 메서드는 Selenium의 WebDriverWait 및 Expect_conditions를 사용하여 요소를 감지하므로 요소가 비동기적으로 로드될 수 있는 동적 웹 페이지도 처리할 수 있습니다.
텍스트 추출 논리를 구현하는 다른 방법을 추가합니다.
def start_browser(self): """Initialize and return a ChromeDriver instance""" try: service = webdriver.ChromeService() self.driver = webdriver.Chrome(service=service, options=self.options) self.driver.implicitly_wait(10) return self.driver except Exception as e: self.logger.error(f"Failed to start browser: {str(e)}") raise def close_browser(self): """Safely close the browser""" if self.driver: self.driver.quit() self.driver = None
이 메소드에는 웹 자동화에서 흔히 발생하는 문제인 StaleElementReferenceException을 처리하기 위한 재시도 논리가 포함되어 있습니다.
가격 추적기 핵심 구현
이제 자동화된 테스트 Python 개념과 강력한 오류 처리 기능을 통합하여 주요 스크래핑 기능을 구축해 보겠습니다. core/scraper.py 파일에 아래 코드 조각을 추가하세요.
mkdir price_tracker_automation && cd price_tracker_automation python3 -m venv env source env/bin/activate
위 코드에서는 브라우저와 요소 처리 구성 요소를 통합하는 BookScraper 클래스를 만들었습니다. 이 클래스는 요소 로케이터를 중앙 집중화하고 스크래핑 작업을 위한 깔끔한 API를 제공함으로써 웹 자동화 프레임워크 설계의 핵심 개념인 페이지 개체 모델 패턴을 따릅니다.
다음으로 BookScraper 클래스를 업데이트하여 핵심 제품 데이터 추출 방법을 추가합니다.
selenium==4.16.0 webdriver-manager==4.0.1 python-dotenv==1.0.0 requests==2.31.0
위 방법은 구조화된 접근 방식을 사용하여 제품 정보를 수집하고 디버깅 및 모니터링을 위한 자세한 로그를 유지합니다.
데이터베이스 관리 설정
스크랩된 데이터의 영구 저장을 처리하는 웹 자동화 프레임워크의 데이터베이스 계층을 구현해 보겠습니다. 이 구성요소를 사용하면 시간에 따른 가격 변화를 추적할 수 있습니다. 아래 코드 조각을 데이터베이스/db_manager.py에 추가하세요.
pip install -r requirements.txt
위 코드에서는 모든 데이터베이스 작업을 처리하는 DatabaseManager 클래스를 정의했습니다. 우리는 데이터베이스를 설정하고 구성할 필요가 없도록 단순성과 이식성을 위해 SQLite를 사용했으며, 많은 양의 데이터를 저장하지 않기 때문에 SQLite는 웹 스크래핑 자동화 프로젝트에도 이상적입니다.
다음으로, 데이터베이스/db_manager.py를 업데이트하여 데이터베이스 초기화 방법을 추가하세요.
price_tracker_automation/ ├── core/ │ ├── browser.py | ├── scraper.py │ └── element_handler.py ├── database/ │ └── db_manager.py ├── notifications/ | └── price_alert.py ├── requirements.txt ├── run.py └── main.py
여기에서는 SQL DDL 문을 사용하여 데이터베이스 스키마를 설정하고, 가격을 추적하고 저장한 데이터에 대한 기록 분석을 수행할 수 있는 적절한 관계와 제약 조건을 갖춘 제품 및 가격 기록에 대한 별도의 테이블을 만듭니다.
이제 데이터베이스에 데이터를 저장하는 또 다른 방법을 추가해 보겠습니다.
from selenium import webdriver from selenium.webdriver.chrome.service import Service from selenium.webdriver.support import expected_conditions as EC import logging class BrowserManager: def __init__(self, headless=False): self.options = webdriver.ChromeOptions() if headless: self.options.add_argument('--headless') # Add additional stability options self.options.add_argument('--no-sandbox') self.options.add_argument('--disable-dev-shm-usage') self.options.add_argument('--disable-gpu') self.driver = None self.logger = logging.getLogger(__name__)
위 코드에서는 SQL 삽입을 방지하기 위해 매개변수화된 쿼리를 사용하여 데이터 지속성 논리를 구현했습니다. 이 메소드는 SQLite의 ON CONFLICT 절을 사용하여 삽입 및 업데이트 작업을 모두 처리합니다.
주요 애플리케이션 통합
Selenium WebDriver Python 구현의 모든 요소를 통합하여 모든 것을 기본 애플리케이션 클래스와 하나로 묶어 보겠습니다. 아래 코드 조각을 main.py 파일에 추가하세요.
def start_browser(self): """Initialize and return a ChromeDriver instance""" try: service = webdriver.ChromeService() self.driver = webdriver.Chrome(service=service, options=self.options) self.driver.implicitly_wait(10) return self.driver except Exception as e: self.logger.error(f"Failed to start browser: {str(e)}") raise def close_browser(self): """Safely close the browser""" if self.driver: self.driver.quit() self.driver = None
위 코드에서는 웹 스크래핑 자동화 솔루션의 모든 구성 요소를 조정하는 기본 PriceTracker 클래스를 생성합니다. PriceTracker 클래스는 모듈성과 테스트 가능성을 유지하기 위해 종속성 주입 패턴을 따릅니다.
다음으로 PriceTracker 클래스를 업데이트하여 핵심 추적 방법을 추가합니다.
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.common.exceptions import TimeoutException, StaleElementReferenceException class ElementHandler: def __init__(self, driver, timeout=10): self.driver = driver self.timeout = timeout
여기서 웹 스크래핑을 처리하고 스크래핑된 데이터를 저장하는 주요 제품 추적 로직을 구현했습니다.
애플리케이션 실행
자동화 스크립트를 실행하기 위한 실행 스크립트를 만들어 보겠습니다. run.py 파일에 다음 코드 조각을 추가하세요.
def wait_for_element(self, locator, timeout=None): """Wait for element with retry mechanism""" timeout = timeout or self.timeout try: element = WebDriverWait(self.driver, timeout).until( EC.presence_of_element_located(locator) ) return element except TimeoutException: raise TimeoutException(f"Element {locator} not found after {timeout} seconds") def get_text_safely(self, locator, timeout=None): """Safely get text from element with retry mechanism""" max_retries = 3 for attempt in range(max_retries): try: element = self.wait_for_element(locator, timeout) return element.text.strip() except StaleElementReferenceException: if attempt == max_retries - 1: raise continue
이제 터미널에서 다음 명령을 실행하여 스크립트를 실행하세요.
mkdir price_tracker_automation && cd price_tracker_automation python3 -m venv env source env/bin/activate
위 명령은 아래 스크린샷에 출력을 표시합니다.
위 스크립트에서 자동화 스크립트가 지정된 모든 URL에 대한 가격을 추적하고 있음을 알 수 있습니다.
가격 변동 추적
현재 구현에서는 제품 가격만 추적하고 저장합니다. 가격을 추적한 후 사용자에게 가격 변동에 대해 알리도록 가격 추적기를 개선해 보겠습니다. 알림/price_alert.py 파일에 다음 코드 조각을 추가하세요.
selenium==4.16.0 webdriver-manager==4.0.1 python-dotenv==1.0.0 requests==2.31.0
위의 코드 조각에서는 필수 종속성이 있는 PriceAlertManager 클래스를 만들었습니다. 관리자는 데이터베이스 관리자 인스턴스를 매개변수로 사용하고 경보 작업 추적을 위한 로깅을 설정합니다. 이 클래스는 현재 가격과 이전 가격을 비교하기 위해 복잡한 조인을 사용합니다. 그런 다음 동적 가격 변동률 계산을 구현하고 가격 변동 정보에 대한 구조화된 사전을 만들었습니다.
다음으로 PriceAlertManager 클래스를 업데이트하여 이메일 알림 기능을 추가하세요.
pip install -r requirements.txt
여기에서는 Python의 이메일 및 SMTP 라이브러리를 사용하여 이메일 알림을 만들었습니다. 구현에서는 MIMEText 클래스를 사용하여 올바른 형식의 이메일 메시지를 생성합니다. 이메일 본문은 F-문자열을 사용하여 동적으로 생성되며, 정확한 통화 형식과 함께 자세한 가격 변동 정보가 통합되어 있습니다.
이제 가격 알림을 포함하도록 실행 스크립트를 수정해 보겠습니다.
price_tracker_automation/ ├── core/ │ ├── browser.py | ├── scraper.py │ └── element_handler.py ├── database/ │ └── db_manager.py ├── notifications/ | └── price_alert.py ├── requirements.txt ├── run.py └── main.py
이제 스크립트를 다시 실행하면 아래 스크린샷처럼 제품 가격을 추적하고 가격이 변경된 제품에 대해 알려줍니다.
매번 수동으로 실행할 필요 없이 cron 작업에서 이 스크립트를 실행하여 제품 가격을 추적하고 가격 변동에 대해 실시간으로 알림을 받을 수 있습니다.
예. 0 */6 * * * python run.py --urls
"http://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.html"
"http://books.toscrape.com/catalogue/tipping-the-velvet_999/index.html"
"http://books.toscrape.com/catalogue/soumission_998/index.html"
결론
이 튜토리얼 전체에서 Selenium과 Python을 사용하여 강력한 웹 자동화 도구를 구축하는 방법을 배웠습니다. 우리는 웹 자동화 기본 사항을 이해하는 것부터 시작한 다음 이 튜토리얼의 데모를 위해 구축한 Price Traker 도구에 대한 개발 환경을 설정했습니다. 그런 다음 제품 가격을 추적하고 사용자에게 가격 변동을 알리는 가격 추적기 애플리케이션을 구축했습니다. 이제 이러한 지식을 갖추었으므로 다음에 어떤 도구를 구축하시겠습니까? 댓글 섹션을 통해 알려주세요. 즐거운 코딩하세요!
위 내용은 Selenium과 Python을 사용하여 강력한 웹 자동화 구축의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

Python과 C는 각각 고유 한 장점이 있으며 선택은 프로젝트 요구 사항을 기반으로해야합니다. 1) Python은 간결한 구문 및 동적 타이핑으로 인해 빠른 개발 및 데이터 처리에 적합합니다. 2) C는 정적 타이핑 및 수동 메모리 관리로 인해 고성능 및 시스템 프로그래밍에 적합합니다.

Python 또는 C를 선택하는 것은 프로젝트 요구 사항에 따라 다릅니다. 1) 빠른 개발, 데이터 처리 및 프로토 타입 설계가 필요한 경우 Python을 선택하십시오. 2) 고성능, 낮은 대기 시간 및 근접 하드웨어 제어가 필요한 경우 C를 선택하십시오.

매일 2 시간의 파이썬 학습을 투자하면 프로그래밍 기술을 효과적으로 향상시킬 수 있습니다. 1. 새로운 지식 배우기 : 문서를 읽거나 자습서를 시청하십시오. 2. 연습 : 코드를 작성하고 완전한 연습을합니다. 3. 검토 : 배운 내용을 통합하십시오. 4. 프로젝트 실무 : 실제 프로젝트에서 배운 것을 적용하십시오. 이러한 구조화 된 학습 계획은 파이썬을 체계적으로 마스터하고 경력 목표를 달성하는 데 도움이 될 수 있습니다.

2 시간 이내에 Python을 효율적으로 학습하는 방법 : 1. 기본 지식을 검토하고 Python 설치 및 기본 구문에 익숙한 지 확인하십시오. 2. 변수, 목록, 기능 등과 같은 파이썬의 핵심 개념을 이해합니다. 3. 예제를 사용하여 마스터 기본 및 고급 사용; 4. 일반적인 오류 및 디버깅 기술을 배우십시오. 5. 목록 이해력 사용 및 PEP8 스타일 안내서와 같은 성능 최적화 및 모범 사례를 적용합니다.

Python은 초보자 및 데이터 과학에 적합하며 C는 시스템 프로그래밍 및 게임 개발에 적합합니다. 1. 파이썬은 간단하고 사용하기 쉽고 데이터 과학 및 웹 개발에 적합합니다. 2.C는 게임 개발 및 시스템 프로그래밍에 적합한 고성능 및 제어를 제공합니다. 선택은 프로젝트 요구와 개인적인 이익을 기반으로해야합니다.

Python은 데이터 과학 및 빠른 개발에 더 적합한 반면 C는 고성능 및 시스템 프로그래밍에 더 적합합니다. 1. Python Syntax는 간결하고 학습하기 쉽고 데이터 처리 및 과학 컴퓨팅에 적합합니다. 2.C는 복잡한 구문을 가지고 있지만 성능이 뛰어나고 게임 개발 및 시스템 프로그래밍에 종종 사용됩니다.

파이썬을 배우기 위해 하루에 2 시간을 투자하는 것이 가능합니다. 1. 새로운 지식 배우기 : 목록 및 사전과 같은 1 시간 안에 새로운 개념을 배우십시오. 2. 연습 및 연습 : 1 시간을 사용하여 소규모 프로그램 작성과 같은 프로그래밍 연습을 수행하십시오. 합리적인 계획과 인내를 통해 짧은 시간에 Python의 핵심 개념을 마스터 할 수 있습니다.

Python은 배우고 사용하기 쉽고 C는 더 강력하지만 복잡합니다. 1. Python Syntax는 간결하며 초보자에게 적합합니다. 동적 타이핑 및 자동 메모리 관리를 사용하면 사용하기 쉽지만 런타임 오류가 발생할 수 있습니다. 2.C는 고성능 응용 프로그램에 적합한 저수준 제어 및 고급 기능을 제공하지만 학습 임계 값이 높고 수동 메모리 및 유형 안전 관리가 필요합니다.


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

안전한 시험 브라우저
안전한 시험 브라우저는 온라인 시험을 안전하게 치르기 위한 보안 브라우저 환경입니다. 이 소프트웨어는 모든 컴퓨터를 안전한 워크스테이션으로 바꿔줍니다. 이는 모든 유틸리티에 대한 액세스를 제어하고 학생들이 승인되지 않은 리소스를 사용하는 것을 방지합니다.

Atom Editor Mac 버전 다운로드
가장 인기 있는 오픈 소스 편집기

에디트플러스 중국어 크랙 버전
작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음

SecList
SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.
