Playwright Python: Tutorial #1 - async, Browser
Playwright Python: Tutorial #1 - async, Browser
Playwright 설치는 https://helloahram.tistory.com/210 참고
Playwright 설치하고 사용하기 w/ Python
Playwright 는 Microsoft 에서 개발한 오픈 소스 자동화 도구이다 Selenium 과 유사하지만, Chromium, Firefox, WebKit 등 여러 브라우저 엔진을 지원하며 보다 빠르고 안정적인 자동화를 제공하고, 모바일 환
helloahram.tistory.com
1. ScreenShot 찍기 - Sync
sync_playwright 를 사용하여 동기적으로 작동하는 Playwright API 를 호출한다
각 작업은 이전 작업이 끝날 때까지 기다리면서 순차적으로 실행된다
page.goto() 나 page.screenshot() 처럼 시간이 걸리는 작업들이 순차적으로 처리되고,
결과가 완료될 때까지 기다린다
# https://youtu.be/FK_5SQPq6nY?si=i1SU8rUyAdoo25y6
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
# Headless Mode
# browser = p.chromium.launch()
# Headed Mode 로 Browser 실행
browser = p.chromium.launch(headless=False)
# 새 페이지 열기
page = browser.new_page()
# 페이지 이동
page.goto("https://www.naver.com/")
# demo.png 라는 이름으로 ScreentShot 저장
page.screenshot(path="demo.png")
# 브라우저 종료
browser.close()
🐣 Headless Mode 는 화면 없이, Browser 가 Background 로 실행되고
Headed Mode (headless=false) 로 설정하면 화면에 Browser 가 나타난다 🐣
2. WebSite Title 가져오기 - Async
async_playwright 를 사용하여 비동기적으로 작동하는 Playwright API 를 호출한다
await 를 사용하여 비동기 함수가 완료될 때까지 기다리고, 그 사이에 다른 작업이 진행되지 않도록 보장한다
await 는 함수가 완료될 때까지 다른 작업을 기다리게 하며, 여러 비동기 작업을 동시에 처리할 수 있는 장점이 있다
# https://youtu.be/FK_5SQPq6nY?si=i1SU8rUyAdoo25y6
import asyncio
from playwright.async_api import async_playwright
async def main():
async with async_playwright() as p:
# Headed Mode, Firefox Browser 사용
browser = await p.firefox.launch(headless=False)
page = await browser.new_page()
await page.goto("https://www.naver.com")
# Page Title 출력
print(await page.title())
await browser.close()
# 비동기 실행
asyncio.run(main())
Playwright Async 에서 await 를 많이 사용하는 이유는
Playwright 의 API 가 기본적으로 비동기적으로 동작하기 때문이다
웹 페이지와의 상호작용 (페이지 이동, 요소 선택, 텍스트 추출 등) 은 시간이 걸리는 작업이기 때문에
이런 비동기 작업들이 완료될 때까지 기다려야 정확한 결과를 얻을 수 있다
따라서 await 를 사용하여 비동기 함수가 끝날 때까지 기다리면서 코드가 순차적으로 실행되도록 보장한다
만약 await 를 사용하지 않으면, 비동기 작업이 완료되기 전에 다음 코드가 실행될 수 있어 예기치 않은 결과가 발생할 수 있다
sync 에서 await 를 사용하지 않는 이유는, 그 자체가 Synchronous 함수이기 때문에 순차적으로 실행되며,
이전 작업이 완료된 후에 다음 작업을 실행하기 때문에 await 를 쓸 필요가 없다
import asyncio
Python 에서 비동기 프로그래밍을 하기 위한 라이브러리
asyncio 는 비동기 I/O 작업을 관리하고 실행하고 실행하는 데 사용되며
async/ await 구문을 통해 비동기 작업을 처리할 수 있게 도와준다
Async Function
async def 로 정의된 함수는 비동기 함수로, 이 함수는 coroutine 을 반환한다
즉, 시간이 오래 걸리는 작업을 비동기적으로 실행할 수 있다
await
비동기 함수 내에서 다른 비동기 함수가 완료될 때까지 기다리기 위해 사용한다
await 를 사용하면 해당 작업이 끝날 때까지 다른 작업이 진행되지 않도록 기다린다
Event Loop
asyncio 는 Event Loop 를 통해 비동기 작업을 관리한다
이벤트 루프는 여러 비동기 작업을 동시에 처리할 수 있도록 스케줄링하며,
각 작업은 await 를 만나면 그 결과가 올 때까지 기다린 후 다음 작업을 실행한다
참고 - Sync/ Async 같은 코드, 다른 느낌
const result = syncFunction(); // 동기 함수
console.log(result); // 이전 함수가 끝날 때까지 기다린 후 실행됨
const result = await asyncFunction(); // 비동기 함수
console.log(result); // asyncFunction()이 완료될 때까지 기다린 후 실행됨