Gallery로 돌아가기

playwLeft

v0.1.0

Rust Browser Automation

Rust로 구축된 에이전트 중심의 브라우저 자동화 툴킷.
Playwright의 대안으로, CDP 프로토콜 기반의 네이티브 성능을 제공합니다.

RustPython ≥ 3.10Apache-2.0Alpha
# Build from source (Rust required)
$ git clone https://github.com/CocoRoF/playwLeft
$ cd playwLeft
$ maturin develop --release

핵심 기능

Rust의 성능과 안전성으로 브라우저를 자동화하세요.

Rust 코어

핵심 로직이 Rust로 구현되어 메모리 안전성과 최대 성능을 보장합니다. 네이티브 속도로 브라우저를 제어합니다.

에이전트 퍼스트

AI 에이전트가 브라우저를 직접 제어할 수 있도록 설계되었습니다. 도구 호출 인터페이스를 기본 제공합니다.

CDP 프로토콜

Chrome DevTools Protocol을 직접 구현하여, 브라우저와 낮은 레벨에서 직접 통신합니다.

비동기 네이티브

Tokio 기반의 완전한 비동기 아키텍처로, 여러 페이지와 브라우저를 동시에 효율적으로 관리합니다.

Python 바인딩

PyO3를 통해 Python에서 네이티브처럼 사용할 수 있습니다. 완전한 타입 힌트와 async/await를 지원합니다.

메모리 안전

Rust의 소유권 시스템으로 메모리 누수와 경쟁 조건을 컴파일 타임에 방지합니다.

아키텍처

3계층 구조로 성능과 사용성을 동시에 달성합니다.

Python Layer

PyO3 바인딩, async/await API, 타입 힌트

Rust Core

브라우저 관리, CDP 통신, 이벤트 처리

CDP Protocol

Chrome DevTools Protocol, WebSocket 통신

코드 예제

직관적인 Python API로 브라우저를 제어하세요.

기본 네비게이션

import playleft

async with playleft.Browser() as browser:
    page = await browser.new_page()
    await page.goto("https://example.com")

    title = await page.title()
    print(f"Title: {title}")

요소 상호작용

async with playleft.Browser() as browser:
    page = await browser.new_page()
    await page.goto("https://example.com")

    # CSS 셀렉터로 요소 선택
    element = await page.query_selector("input#search")
    await element.type("hello world")
    await element.press("Enter")

에이전트 통합

from playleft.tools import BrowserToolkit

# AI 에이전트용 도구 세트 생성
toolkit = BrowserToolkit()
tools = toolkit.get_tools()

# LangChain/LangGraph 에이전트에 연결
agent = create_agent(
    tools=tools,
    instructions="웹을 탐색하세요"
)

Playwright와의 차이점

특성playwLeftPlaywright
코어 언어RustNode.js
프로토콜CDP (직접 구현)CDP (래핑)
에이전트 퍼스트✓ 기본 제공✗ 별도 구현
메모리 안전성컴파일 타임 보장런타임 GC
Python 바인딩PyO3 (네이티브)서브프로세스
상태Alpha (v0.1.0)Stable

playwLeft에 기여하세요

playwLeft는 현재 Alpha 단계입니다. 피드백과 기여를 환영합니다.