-
Java 롯데온 베스트 크롤링 Playwright 샘플개발 2026. 3. 8. 22:28
목차

Java 롯데온 베스트 크롤링 Playwright 샘플
Selenium과 비슷한 라이브러리로 Playwright가 있습니다.
Playwright는 Selenium과 다르게 WebDriver 별도로 필요하지 않습니다.
또한 Selenium에 비해 속도가 빠릅니다.
그리고 Selenium과 동일한 셀렉터 구조를 사용합니다.
CSS 셀렉터 오류가 발생하면 동일하게 브라우저 개발자 도구에서 실제 HTML 구조를 확인 후 수정하면 됩니다.
Playwright
Playwright는 마이크로소프트에서 개발한 웹 자동화 및 테스트 프레임워크입니다.
최초 실행 시 자동으로 브라우저 ( Chromium 등 ) 자동 설치합니다.
https://playwright.devFast and reliable end-to-end testing for modern web apps | Playwright
Cross-browser end-to-end testing for modern web apps
playwright.dev
https://playwright.dev/java/docs/api/class-playwright
Playwright | Playwright Java
Playwright module provides a method to launch a browser instance. The following is a typical example of using Playwright to drive automation:
playwright.dev
항목 Selenium 시기 2004 년 2019 년 드라이버 ChromeDriver 별도 필요 브라우저 내장 대기 방식 WebDriverWait + ExpectedConditionswaitForSelector ( 자동 설치 ) 자동 재시도 속도 상대적으로 느림 빠름 스크린샷 별도 설정 필요 page.screenshot() 네트워크 제한적 NETWORKIDLE 등 세밀한 제어 의존성 WebDriverManager 추가 필요 playwright 하나로 완결 <!-- Playwright --> <dependency> <groupId>com.microsoft.playwright</groupId> <artifactId>playwright</artifactId> <version>1.58.0</version> <scope>compile</scope> </dependency>// Playwright https://mvnrepository.com/artifact/com.microsoft.playwright/playwright implementation("com.microsoft.playwright:playwright:1.58.0")
Playwright 
Playwright
롯데온 베스트
1. 크롤링할 URL로 이동합니다
2. 네트워크 요청이 대부분 끝날 때까지 대기합니다. ( 동적 페이지 대응 )
3. 원하는 요소를 CSS 셀렉터로 선택합니다.반응형import java.util.List; import com.microsoft.playwright.Browser; // 브라우저 ( Chromium / Firefox / WebKit ) 인스턴스 import com.microsoft.playwright.BrowserContext; // 쿠키/스토리지 분리용 컨텍스트 import com.microsoft.playwright.BrowserType; // 브라우저 타입 및 옵션 import com.microsoft.playwright.ElementHandle; // 웹 페이지 내의 특정 DOM 요소 ( Element ) 에 대한 직접적인 참조 ( Handle ) import com.microsoft.playwright.Locator; // 요소 집합을 나타내는 Locator import com.microsoft.playwright.Page; // 실제 탭 ( 페이지 ) import com.microsoft.playwright.Playwright; // Playwright 엔진 생성 import com.microsoft.playwright.options.WaitUntilState; // 언제 성공적으로 완료된 것으로 간주할지 결정 /** * 롯데온 베스트 크롤링 * Playwright * @since 2026-03-08 */ public class LotteOnPlaywrightCrawler { public static void main(String[] args) { // try-with-resources로 Playwright 자원 자동 정리 try ( Playwright playwright = Playwright.create() ) { // Chromium 브라우저 실행 옵션 설정 BrowserType.LaunchOptions launchOptions = new BrowserType.LaunchOptions() .setHeadless(true) // 브라우저 창을 화면에 표시하지 않는 헤드리스 모드 .setSlowMo(50); // 각 동작 사이에 50ms 지연 ( 안정성 향상 ) // Chromium 브라우저 실행 ( Chrome/Edge 대신 내장 Chromium 사용 ) Browser browser = playwright.chromium().launch(launchOptions); // 브라우저 컨텍스트 옵션 설정 ( 탭 / 세션 단위 설정 ) Browser.NewContextOptions contextOptions = new Browser.NewContextOptions() // 일반 사용자처럼 보이도록 User-Agent 설정 (봇 감지 우회) .setUserAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) " + "AppleWebKit/537.36 (KHTML, like Gecko) " + "Chrome/120.0.0.0 Safari/537.36") // 뷰포트 ( 화면 ) 크기 설정 .setViewportSize(1920, 1080) // 자바스크립트 활성화 여부 ( 기본값 true, 명시적 설정 ) .setJavaScriptEnabled(true) // 로케일 설정 ( 한국어 ) .setLocale("ko-KR"); // 설정한 옵션으로 새 브라우저 컨텍스트 생성 BrowserContext context = browser.newContext(contextOptions); // 컨텍스트에서 새 페이지 ( 탭 ) 생성 Page page = context.newPage(); // 봇 감지 우회 : navigator.webdriver 속성을 undefined로 변경 page.addInitScript("Object.defineProperty(navigator, 'webdriver', " + "{get: () => undefined})"); try { // 1. 크롤링할 URL로 이동 String url = "https://www.lotteon.com/p/display/shop/seltDpShop/13979"; page.navigate(url); // 2. 네트워크 요청이 대부분 끝날 때까지 대기 ( 동적 페이지 대응 ) page.navigate(url, new Page.NavigateOptions() // 네트워크 요청이 거의 없는 상태 ( idle ) 까지 대기 .setWaitUntil(WaitUntilState.NETWORKIDLE) // 최대 대기 시간 5초 설정 .setTimeout(5000)); // 현재 페이지 제목 출력 ( 정상 접속 여부 확인 ) System.out.println("페이지 제목 : " + page.title()); // 3. 원하는 요소를 CSS 셀렉터로 선택 List<ElementHandle> items = page.querySelectorAll(".c-product-list__item"); // 요소 개수 출력 int count = items.size(); System.out.println("총 상품 수: " + count); // 구분선 출력 System.out.println("=".repeat(60)); // 순위 카운터 초기값 설정 int rank = 1; // 4. 각 카드에서 이름/가격/링크 텍스트 추출 for ( ElementHandle item : items ) { try { // 상품 : 내부의 이름 요소 선택 ( 실제 클래스명에 맞게 수정 ) String name = item.querySelector(".c-product-title__title").textContent().trim(); // 가격 : 내부의 가격 요소 선택 ( 실제 클래스명에 맞게 수정 ) String price = item.querySelector(".c-product-price__final").textContent().trim(); // 이미지 : img 태그의 src 속성 String img = item.querySelector("img").getAttribute("src"); System.out.printf("[%2d위] %n", rank); System.out.printf("상품 : %s%n", name); System.out.printf("가격 : %s원%n", price); System.out.printf("이미지 : %s%n", img); // 상품 간 구분선 출력 System.out.println("-".repeat(60)); // 5위까지만 출력 후 반복 종료 ( 테스트용 제한 ) if ( rank == 5 ) break; // 다음 상품으로 순위 증가 rank++; } catch ( Exception e ) { // 개별 상품 파싱 실패 시 오류 출력 후 다음 상품으로 진행 System.out.println("[" + rank + "위] 상품 정보 추출 실패: " + e.getMessage()); // 실패해도 순위 증가 rank++; } } } catch ( Exception e ) { // 페이지 접속 또는 대기 중 발생한 예외 메시지 출력 System.err.println("크롤링 중 오류 발생: " + e.getMessage()); // 예외 스택 트레이스 전체 출력 (디버깅용) e.printStackTrace(); // 오류 발생 시 페이지 스크린샷 저장 (디버깅용) page.screenshot(new Page.ScreenshotOptions() .setPath(java.nio.file.Paths.get("error_screenshot.png"))); System.out.println("스크린샷 저장 완료: error_screenshot.png"); } finally { // 브라우저 컨텍스트 종료 context.close(); // 브라우저 종료 browser.close(); // 종료 로그 출력 System.out.println("브라우저 종료"); } } } }
롯데온 베스트 
롯데온 베스트 
롯데온 베스트
요약
1. Playwright https://mvnrepository.com/artifact/com.microsoft.playwright/playwright
2. 롯데온 베스트 https://www.lotteon.com/p/display/shop/seltDpShop/13979
3. 리스트 .c-product-list__item
4. 상품 .c-product-title__title
5. 가격 .c-product-title__title
6. 이미지 img반응형'개발' 카테고리의 다른 글
Java 오늘의집 베스트 크롤링 Playwright 샘플 (0) 2026.03.09 Java 뽐뿌 뽐뿌게시판 크롤링 Jsoup 샘플 (0) 2026.03.07 Java 옥션 베스트 크롤링 Selenium 샘플 (0) 2026.03.06 Java G마켓 베스트 크롤링 HtmlUnit 샘플 (0) 2026.03.05 Java 11번가 베스트셀러 크롤링 Jsoup 샘플 (0) 2026.03.04