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, 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 |