TIL

Playwright Python: Tutorial #1 - async, Browser

아람2 2025. 2. 20. 18:32
반응형

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()이 완료될 때까지 기다린 후 실행됨

 

 

반응형