본문으로 건너뛰기

© 2026 Molayo

Dev.to헤드라인2026. 06. 18. 11:58

모든 웹사이트를 구조화된 JSON으로 변환하는 오픈 소스 브라우저 에이전트를 만들었습니다

요약

웹사이트를 구조화된 JSON 데이터로 변환하는 오픈 소스 브라우저 에이전트인 Browsewright를 소개합니다. LLM이 직접 브라우저를 조작하여 복잡한 웹 인터랙션을 수행하고 의도에 맞는 데이터를 추출합니다.

핵심 포인트

  • 전통적인 스크래핑 방식과 달리 셀렉터나 XPath 작성 없이 의도(intent)만으로 동작
  • JavaScript 실행, 로그인, 드롭다운 등 복잡한 웹 환경 대응 가능
  • LLM이 스스로 브라우저 스크립트를 작성하고 실행하는 에이전트 방식 채택
  • 시장 조사, 리드 추출, 자동화 워크플로우 등 비즈니스 활용에 최적화

모든 웹사이트를 구조화된 JSON으로 변환하는 오픈 소스 브라우저 에이전트를 만들었습니다

대부분의 웹 스크래핑 (Web Scraping) 도구들은 여전히 인터넷이 깨끗한 HTML로 이루어져 있다고 생각합니다.

그렇지 않습니다.

현대의 웹은 다음과 같이 구성되어 있습니다:

  • JavaScript가 많은 페이지
  • 로그인과 유사한 흐름 (login-ish flows)
  • 드롭다운 (dropdowns)
  • 오래된 정부 양식
  • API가 없는 가격 페이지
  • 매주 DOM이 변경되는 웹사이트
  • 클릭, 탭, 필터, 양식 뒤에 유용한 데이터가 숨겨져 있는 페이지

그래서 저는 Browsewright를 만들었습니다:

LLM에 URL과 목표를 제공하세요. 이 에이전트는 실제 Chrome 브라우저를 구동하여 작업을 완료하고, 가공되지 않은 HTML 대신 구조화된 데이터를 반환합니다.

GitHub: https://github.com/krishnashakula/browsewright

pip install browsewright

그 다음 실행하세요:

bw "https://stripe.com" "what does this company do and who is it for"

셀렉터 (selectors), XPath, 브라우저 스크립트, 재시도 로직 (retry logic), 추출 코드를 작성하는 대신, 의도 (intent)를 전달하기만 하면 됩니다.

Browsewright가 경로를 찾아냅니다.

아이디어

Playwright는 사용자가 스크립트를 작성하는 브라우저를 자동화합니다.

Browsewright는 스스로 스크립트를 작성하는 브라우저입니다.

전통적인 브라우저 자동화에서는 다음과 같이 코드를 작성합니다:

page.goto(url)
page.click("#pricing")
page.wait_for_selector(".plans")
...

이 방식은 웹사이트가 변경될 때까지는 작동합니다.

Browsewright는 이 모델을 뒤집습니다.

당신은 다음과 같이 말합니다:

bw "https://example.com/pricing" "extract all plans, prices, limits, and billing options as JSON"

LLM이 페이지를 읽고, 무엇이 중요한지 결정하며, 필요한 경우에만 브라우저를 구동하고, 구조화된 출력을 반환합니다.

만든 이유

AI 에이전트, 리드 인리치먼트 (lead enrichment) 시스템, 시장 조사 도구, 그리고 n8n 스타일의 자동화에서 동일한 문제를 계속 목격했습니다:

LLM은 작업을 이해할 만큼 충분히 똑똑합니다.

하지만 웹을 안정적으로 조작할 수는 없습니다.

대부분의 시스템은 다음 계층 중 하나에서 멈춥니다:

  1. 가공되지 않은 HTML 가져오기
  2. 페이지를 Markdown으로 변환하기
  3. LLM에게 요약을 요청하기
  4. 답변이 유용하기를 바라기

단순한 페이지에는 괜찮습니다.

하지만 실제 비즈니스 워크플로우에는 실행 (action)이 필요합니다:

  • 이 양식 채우기 (Fill this form)
  • 가격 정보 찾기 (Find pricing)
  • 이 레지스트리 검색하기 (Search this registry)
  • 경쟁사 비교하기 (Compare competitors)
  • 재고 가용성 추적하기 (Track stock availability)
  • 잠재 고객 데이터 추출하기 (Extract lead data)
  • 브랜드 언급 모니터링하기 (Monitor brand mentions)
  • 쿼리 제출하기 (Submit a query)
  • 깔끔한 JSON 반환하기 (Return clean JSON)

이것은 단순한 스크래핑 (scraping)이 아닙니다.

이것은 브라우저 작업 (browser work)입니다.

Browsewright가 하는 일

Browsewright는 LLM (대규모 언어 모델)이 실제 브라우저를 조작할 수 있게 해주는 오픈 소스 (open-source) Python 도구입니다.

다음과 같은 작업이 가능합니다:

  • 페이지 읽기
  • 클릭할 항목 결정하기
  • 양식 채우기 (fill forms)
  • 양식 제출하기 (submit forms)
  • 구조화된 JSON 추출하기
  • Chrome을 실행하기 전에 더 저렴한 지름길 사용하기
  • 본인의 API 키를 사용하여 로컬에서 실행하기
  • AI 어시스턴트를 위한 MCP 서버로 노출하기

설치:

pip install browsewright

CLI에서 사용하기:

bw "https://news.ycombinator.com" "what is the top story right now"

JSON 모드 사용하기:

bw "https://example.com" "find the pricing plans" --json

시각적으로 디버깅하기:

bw "https://example.com" "debug this page" --no-headless --verbose

Python에서 사용하기:

import asyncio
from browsewright import search

...

단순히 웹을 읽는 것이 아닙니다. 웹에서 행동합니다.

대부분의 AI 스크래핑 (scraping) 도구는 페이지를 요약할 수 있습니다.

Browsewright는 페이지를 조작할 수 있습니다.

예시:

bw-tasks form \
  "https://registers.maryland.gov/RowNetWeb/Estates/frmEstateSearch2.aspx" \
  --profile examples/sample_profile.json

이것은 깔끔한 JSON API가 아닙니다.

이것은 현대적이고 개발자 친화적인 엔드포인트 (endpoint)도 아닙니다.

오래된 양식 기반 (form-based) 웹사이트입니다.

Browsewright는 양식을 검사하고, 필드를 이해하며, 프로필을 입력값에 매핑하고, 유효한 드롭다운 옵션을 선택하고, 양식을 제출한 뒤 결과를 추출할 수 있습니다.

셀렉터 (selectors)도 필요 없습니다.

XPath도 필요 없습니다.

해당 웹사이트만을 위한 커스텀 스크립트 (custom script)도 필요 없습니다.

오직 의도 (intent)만 있으면 됩니다.

저렴한 경로를 우선시합니다

설계 목표 중 하나는 간단했습니다:

실제로 브라우저가 필요한 경우가 아니라면 브라우저를 실행하지 마십시오.

많은 사이트의 답을 더 저렴한 경로를 통해 얻을 수 있습니다:

  • 공개 API (public APIs)
  • RSS 피드 (RSS feeds)
  • JSON 엔드포인트 (JSON endpoints)
  • 공개 아카이브 (public archives)
  • 정적 콘텐츠 (static content)

따라서 Browsewright는 먼저 사전 점검 파이프라인 (pre-flight pipeline)을 시도합니다.

해당 방식이 실패할 경우에만 Chrome을 실행합니다.

덕분에 비용이 중요한 워크플로우 (workflows)에서 유용하게 사용할 수 있습니다.

제 벤치마크 (benchmark) 결과에 따르면, Browsewright는 총 약 4.7센트의 비용으로 50개의 실제 웹사이트에서 데이터를 추출했습니다.

재현 방법:

python examples/batch_test.py

내장된 워크플로우 (Built-in workflows)

Browsewright는 일반적인 비즈니스 자동화 유스케이스 (use cases)를 위한 작업 명령어를 함께 제공합니다.

1. 경쟁사 모니터링 (Competitor watch)

bw-tasks watch "https://competitor.com/pricing"

가격 페이지, 기능 페이지, 변경 로그 (changelogs), 포지셔닝 (positioning), 그리고 랜딩 페이지 (landing pages)를 모니터링하는 데 사용하세요.

2. 리드 강화 (Lead enrichment)

bw-tasks enrich "https://company.com"

CRM 스타일의 필드와 아웃리치 (outreach)를 위한 개인화된 첫 문장을 반환합니다.

출력 예시:

{
  "company_name": "ExampleCo",
  "industry": "AI SaaS",
...

3. 에이전트 기반 양식 채우기 (Agentic form fill)

bw-tasks form "https://example.com/form" --profile profile.json

권한이 부여된 내부 워크플로우 (workflows), 테스트, 조사 양식, 그리고 반복적인 수동 데이터 입력 작업에 유용합니다.

4. 가격 및 재고 추적 (Price and stock tracking)

bw-tasks track "https://store.com/product"

제품 가용성, 가격 변동, 그리고 페이지 변경 사항을 추적합니다.

5. 브랜드 모니터링 (Brand monitoring)

bw-tasks brand "Browsewright" "https://site1.com" "https://site2.com"

선택된 URL 전반에 걸쳐 언급 (mentions), 감성 (sentiment), 그리고 요약본을 수집합니다.

MCP와 연동

Browsewright는 MCP 도구로도 실행할 수 있습니다.

MCP 지원 기능을 포함하여 설치하세요:

pip install "browsewright[mcp]"

MCP 클라이언트 (client)에 추가하세요:

{
  "mcpServers": {
    "browsewright": {
...

이제 귀하의 AI 어시스턴트 (AI assistant)는 다음과 같은 도구를 갖게 됩니다:

read_page(url, goal)

이는 AI 어시스턴트가 정적 텍스트 (static text)만 보고 추측하는 대신, 실제 브라우저를 사용하여 웹을 조사할 수 있음을 의미합니다.

구조화된 JSON이 중요한 이유

요약본도 좋지만,

JSON은 유용합니다.

자동화를 위해서는 보통 다른 시스템으로 바로 들어갈 수 있는 데이터가 필요합니다:

  • CRM
  • 스프레드시트 (spreadsheet)
  • 데이터베이스 (database)
  • Slack
  • n8n
  • Make
  • Zapier
  • 벡터 데이터베이스 (vector database)
  • 내부 대시보드 (internal dashboard)
  • 다른 AI 에이전트 (AI agent)

Browsewright는 핵심적인 구조화된 추출 프리미티브 (structured extraction primitive)를 가지고 있습니다:

import asyncio
from browsewright import extract_structured

...

이것이 제가 가장 중요하게 생각하는 부분입니다:

"AI가 웹사이트를 브라우징했다"가 아닙니다.

그보다는 다음과 같습니다:

AI가 엉망인 웹사이트를 신뢰할 수 있는 자동화 입력값 (automation input)으로 변환했다.

활용 사례

Browsewright는 웹 데이터가 필요하지만 해당 사이트가 깔끔한 API를 제공하지 않을 때 유용합니다.

예시:

AI 에이전트 (AI agents)

에이전트에게 페이지를 검사하고, 양식을 채우며, 구조화된 출력값 (structured output)을 반환하는 능력을 부여하세요.

n8n 워크플로우 (n8n workflows)

Browsewright를 브라우저/리서치 레이어 (browser/research layer)로 사용한 다음, JSON을 워크플로우의 나머지 부분으로 전달하세요.

영업 자동화 (Sales automation)

기업 웹사이트, 가격 페이지, 채용 페이지 및 최근 공지사항으로부터 리드 (leads) 정보를 풍부하게 만드세요.

시장 조사 (Market research)

경쟁사의 포지셔닝, 제품 페이지, 통합 (integrations), 가격 및 메시징을 추출하세요.

채용 (Recruiting)

기업 채용 페이지에서 채용 공고를 추출하여 깔끔한 구조화된 데이터로 만드세요.

모니터링 (Monitoring)

중요한 URL의 변경 사항을 추적하고 무언가 변경되면 알림을 받으세요.

내부 운영 (Internal operations)

운영 권한이 있는 시스템에서 반복적인 브라우저 작업을 자동화하세요.

간단한 n8n 스타일의 흐름

다음은 Browsewright가 설계된 목적의 워크플로우 예시입니다:

스케줄 트리거 (Schedule trigger)
   ↓
경쟁사 가격 페이지에서 Browsewright 실행
...

브라우저는 단지 하나의 구성 요소일 뿐입니다.

자동화를 유용하게 만드는 것은 바로 출력값 (output)입니다.

책임감 있는 사용에 관한 중요 참고 사항

Browsewright는 승인된 리서치, 본인 소유의 자산, 내부 자동화, 그리고 자동화된 접근이 허용된 웹사이트를 위해 설계되었습니다.

매너 모드 (polite mode)를 사용하세요.

robots.txt를 준수하세요.

속도 제한 (rate limits)을 준수하세요.

서비스 약관 (terms of service)을 준수하세요.

웹사이트를 남용하거나, 규칙을 우회하거나, 개인 데이터를 수집하거나, 법률을 위반하기 위해 브라우저 자동화를 사용하지 마세요.

가장 좋은 사용 사례는 "모든 것을 스크래핑하는 것"이 아닙니다.

가장 좋은 사용 사례는 다음과 같습니다:

반복적인 수동 브라우저 작업을 신뢰할 수 있고, 투명하며, 승인된 자동화로 대체하는 것.

개념적 비교

도구 유형 (Tool type)장점 (Good at)약점 (Weakness)
HTTP 스크래퍼 (HTTP scraper)빠른 정적 추출 (Fast static extraction)JS, 양식(forms), 상호작용 시 작동 중단
...

Browsewright는 모든 스크래퍼를 대체하려는 것이 아닙니다.

단순한 스크래핑(scraping)이 너무 취약하고, 전체 수동 브라우저 스크립팅(manual browser scripting)이 너무 많은 작업이 필요한 경우를 위한 것입니다.

사용해 보기

설치:

pip install browsewright

실행:

bw "https://example.com" "find the pricing and return the plans as JSON"

클론 (Clone):

git clone https://github.com/krishnashakula/browsewright
cd browsewright
pip install -e .

MCP 사용:

pip install "browsewright[mcp]"

GitHub:

https://github.com/krishnashakula/browsewright

피드백을 받고 싶은 부분

다음과 같은 것들을 구축하고 있는 개발자분들의 피드백을 기다립니다:

  • AI 에이전트 (AI agents)
  • 스크래핑 시스템 (scraping systems)
  • 리서치 에이전트 (research agents)
  • n8n 워크플로우 (n8n workflows)
  • 영업 자동화 (sales automation)
  • 시장 정보 도구 (market intelligence tools)
  • 브라우저 자동화 도구 (browser automation tools)
  • MCP 서버 (MCP servers)

특히 다음과 같은 질문에 대해 궁금합니다:

  1. 다음에 어떤 웹사이트를 테스트해봐야 할까요?
  2. Browsewright가 어떤 내장 작업(built-in tasks)을 지원해야 할까요?
  3. 어떤 MCP 워크플로우가 이 도구를 더 유용하게 만들까요?
  4. 프로덕션 환경에서 브라우저 에이전트의 출력 결과를 신뢰하려면 무엇이 필요할까요?
  5. 대규모로 사용하는 팀들을 위해 API는 어떤 모습이어야 할까요?

만약 이 도구가 여러분의 취약한 스크래퍼 작성을 하나라도 줄여줄 수 있다면, 저장소에 별(star)을 눌러주세요.

GitHub: https://github.com/krishnashakula/browsewright

웹은 인간을 위해 만들어졌습니다.

Browsewright는 에이전트가 인간처럼 웹을 사용하고, 기계처럼 데이터를 반환할 수 있게 해줍니다.

AI 자동 생성 콘텐츠

본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
0

댓글

0