Python - Puppeteer vs Selenium vs Playwright

2023. 8. 1. 17:06개발/Python

728x90
반응형

Puppeteer  : 구글 크롬의 DevTools Protocol을 통해 Chrome 혹은 Chromium을 제어하기 위한 API를 제공한다.

특징

  • Headless Browser로 작동
  • UI 없이 간편하게 백그라운드에서 실행되는 브라우저로, 특정 페이지에 접속하고 렌더링되는 과정 이후 코드를 수행할 때 용이하다. (참고로 puppeteer를 설치할 때 Chromium도 같이 깔리기 때문에 가능하다고 한다. puppeteer-core는 Chromium 제외)
    ⇒ 그냥 화면을 보여주지 않고 똑같은 동작을 한다고 생각하면 된다.
  • 넓은 제어폭
  • 마우스, 키보드 뿐 아니라 브라우저 스크린 크키, 쿠키 및 세션 스토리지, 서비스 워커까지 제어가 가능하다고 한다.
  • 병렬 처리와 비동기 처리로 인한 속도 향상

참고 

cheerio : selenium의 bs4와 같은 역할 

크롤링 여러 유용한 정보

예제

더보기

 

import asyncio
from datetime import datetime
import re
 
async  def main():
    print(datetime.now())
    browser = await launch({
        "headless": True,
        "executablePath":'/home/ubuntu/puppeteer/headless-chromium',
        "args": ['--no-sandbox',
            '--single-process',
            '--disable-dev-shm-usage',
            '--disable-gpu',
            '--no-zygote']
    })
    page = await browser.newPage()
 
    # 롯데
    await page.goto("")
    element = await page.querySelectorAll('ul.propertyList > li > p')
 
    # 위메프
    #await page.goto("")
    #element = await page.querySelectorAll('div.ctl_prd_info > div.table_wrap > table.table_info > tbody >  tr > td')
 
    await browser.close()
    print(datetime.now())
 
asyncio.get_event_loop().run_until_complete(main())

Selenium : 웹 애플리케이션 테스트를 위한 포터블 프레임워크이다. 셀레늄은 테스트 스크립트 언어를 학습할 필요 없이 기능 테스트를 만들기 위한 플레이백 도구를 제공한다.

아파치 2.0 라이선스로 배포되는 오픈 소스 소프트웨어이다.

 

특징

  • 많은 사용자
  • 많은 사용자로 인하여 유용한 정보들이 많다.

예제

더보기
from selenium import webdriver
from bs4 import BeautifulSoup
from datetime import datetime
 
print(datetime.now())
options = webdriver.ChromeOptions()
options.binary_location= '/usr/bin/google-chrome'
options.add_argument('headless')
options.add_argument('window-size=1920x1080')
options.add_argument("disable-gpu")
 
options.add_argument("user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36")
driver = webdriver.Chrome('/home/ubuntu/puppeteer/chromedriver', chrome_options=options)
#driver.get("")
driver.get("")
html = driver.page_source
soup = BeautifulSoup(html, 'html.parser')
#search_result = soup.select('div.ctl_prd_info > div.table_wrap > table.table_info > tbody >  tr > td')
search_result = soup.select('ul.propertyList > li > p')
print(datetime.now())
 
driver.quit()

 

Playwright : MS에서 만들었으며 Puppeteer를 개발한 팀이 MS로 옮기면서 개발한 라이브러리이다.

특징

  • Puppeteer와 동일한 특징
  • 웹 지원이 다양하다
  • puppeteer는 chromium만 지원하지만 여러 웹 드라이버(chromium, firefox, webkit)를 지원한다.

예제

더보기

 

import asyncio
from playwright.async_api import async_playwright
from datetime import datetime
 
async def main():
    print(datetime.now())
    args = [
            '--no-sandbox',
            '--single-process',
            '--disable-dev-shm-usage',
            '--disable-gpu',
            '--no-zygote'
    ]
    async with async_playwright() as p:
        for browser_type in [p.chromium]:
            browser = await browser_type.launch(headless=True, args=args)
            page = await browser.new_page()
            await page.goto("")
            element = await page.query_selector_all('div.ctl_prd_info > div.table_wrap > table.table_info > tbody >  tr > td')
            await browser.close()
    print(datetime.now())
 
asyncio.run(main())

 

속도 비교

  위메프 롯데온 소요시간
selenium 09:35:37 ~ 09:35:42  09:39:13 ~ 09:39:22 위메프 : 5초 / 롯데온 : 9초
puppeteer 09:34:15 ~ 09:34:18 09:37:42 ~ 09:37:49 위메프 : 3초 / 롯데온 : 7초
playwright 10:06:27 ~ 10:06:32 10:04:44 ~ 10:04:52 위메프 : 5초 / 롯데온 : 8초
  • 같은 환경에서 Puppeteer가 가장 빠름.

 

참고

puppeteer

playwright

Headless 개념 

 

Puppeteer, Selenium 비교 표

728x90
반응형

'개발 > Python' 카테고리의 다른 글

Python - Faust  (0) 2023.09.04
FastAPI - Redis 연동  (0) 2023.07.31
FastAPI - DB 연동  (0) 2023.07.31
FastAPI - 설치  (0) 2023.07.31
Python - Uvicorn  (0) 2023.07.31