PageAgent๋Š” ๋ธŒ๋ผ์šฐ์ € ํ™•์žฅ์ด๋‚˜ ๋ณ„๋„ ํ—ค๋“œ๋ฆฌ์Šค ํ™˜๊ฒฝ ์—†์ด, ์›นํŽ˜์ด์ง€ ์•ˆ์—์„œ ๋ฐ”๋กœ ์ž์—ฐ์–ด๋กœ GUI๋ฅผ ์ œ์–ดํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ์ธํŽ˜์ด์ง€ ์—์ด์ „ํŠธ๋‹ค. ์‰ฝ๊ฒŒ ๋งํ•ด โ€œ์›น์•ฑ ์•ˆ์— AI ์กฐ์ž‘ ๋ ˆ์ด์–ด๋ฅผ ์‹ฌ๋Š”โ€ ์ชฝ์— ๊ฐ€๊น๋‹ค.

์ด ๋ ˆํฌ๋Š” 7์œ„ ยท โญ +6.2K๋กœ ํšŒ์ž๋œ ํ”„๋กœ์ ํŠธ๋‹ค. ๋ณ„ ์ˆซ์ž๋งŒ ๋ณด๋ฉด ์œ ํ–‰์ฒ˜๋Ÿผ ๋ณด์ผ ์ˆ˜ ์žˆ์ง€๋งŒ, ์‹ค์ œ๋กœ๋Š” ๊ฐœ๋ฐœ์ž๋“ค์ด ์ง€๊ธˆ ์–ด๋””์— ์‹œ๊ฐ„์„ ์“ฐ๊ณ  ์žˆ๋Š”์ง€๋ฅผ ๊ฝค ์†”์งํ•˜๊ฒŒ ๋“œ๋Ÿฌ๋‚ธ๋‹ค. ๋งŽ์€ ์ž๋™ํ™” ๋„๊ตฌ๊ฐ€ ๋ธŒ๋ผ์šฐ์ € ๋ฐ”๊นฅ์—์„œ ์›€์ง์ธ๋‹ค๋ฉด, PageAgent๋Š” ํŽ˜์ด์ง€ ์•ˆ์œผ๋กœ ๋“ค์–ด๊ฐ„๋‹ค. ๋ฐฑ์—”๋“œ ๋Œ€์ˆ˜์ˆ  ์—†์ด ์ œํ’ˆ ์•ˆ์— AI ์ฝ”ํŒŒ์ผ๋Ÿฟ์„ ์–น๊ณ  ์‹ถ์–ด ํ•˜๋Š” SaaS ํŒ€์—๊ฒŒ ์•„์ฃผ ๋งค๋ ฅ์ ์ธ ๊ทธ๋ฆผ์ด๋‹ค. ๊ฒŒ๋‹ค๊ฐ€ ๋ฉ€ํ‹ฐ๋ชจ๋‹ฌ ์Šคํฌ๋ฆฐ์ƒท ์˜์กด ๋Œ€์‹  ํ…์ŠคํŠธ ๊ธฐ๋ฐ˜ DOM ์กฐ์ž‘์„ ๊ฐ•์กฐํ•˜๋Š” ๊ฒƒ๋„ ์ฐจ๋ณ„์ ์ด๋‹ค.

flowchart LR
A[๋ฌธ์ œ] --> B[page-agent]
B --> C[์„ค์น˜]
C --> D[์ตœ์†Œ ์‹คํ—˜]
D --> E[์—…๋ฌด ์ ์šฉ ํŒ๋‹จ]

์น ํŒ ํŒ์„œํ˜• ์น˜ํŠธ์‹œํŠธ

  • ์ด ๋ ˆํฌ์˜ ํ•œ ์ค„ ํ‚ค์›Œ๋“œ๋Š” page-agent๋‹ค.
  • ์ด๋ฒˆ ๋ณด๊ฐ•์—์„œ๋Š” ์„ค์น˜์™€ ์‚ฌ์šฉ ์ˆœ์„œ๋ฅผ ๊ณต์‹ README ๊ธฐ์ค€์œผ๋กœ ๋” ์ด˜์ด˜ํ•˜๊ฒŒ ์ •๋ฆฌํ–ˆ๋‹ค.
  • ์ฝ์„ ๋•Œ๋Š” ์ „์ œ ์กฐ๊ฑด โ†’ ์„ค์น˜ โ†’ ์ฒซ ์‹คํ–‰ โ†’ ๊ฒ€์ฆ ์ˆœ์„œ๋กœ ๋ณด๋ฉด ๋œ๋‹ค.
  • โ€œ๋Œ€๋‹จํ•ด ๋ณด์ธ๋‹คโ€๋ณด๋‹ค โ€œ๋‚ด ์—…๋ฌด์—์„œ ๋ฐ˜๋ณต ๋น„์šฉ์„ ์ค„์ด๋Š”๊ฐ€โ€๋ฅผ ๋จผ์ € ๋ณธ๋‹ค.

์ด ๋ ˆํฌ๋ฅผ ํ•œ ์ค„๋กœ ๋ณด๋ฉด

PageAgent๋Š” ๋ธŒ๋ผ์šฐ์ € ํ™•์žฅ์ด๋‚˜ ๋ณ„๋„ ํ—ค๋“œ๋ฆฌ์Šค ํ™˜๊ฒฝ ์—†์ด, ์›นํŽ˜์ด์ง€ ์•ˆ์—์„œ ๋ฐ”๋กœ ์ž์—ฐ์–ด๋กœ GUI๋ฅผ ์ œ์–ดํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ์ธํŽ˜์ด์ง€ ์—์ด์ „ํŠธ๋‹ค. ์‰ฝ๊ฒŒ ๋งํ•ด โ€œ์›น์•ฑ ์•ˆ์— AI ์กฐ์ž‘ ๋ ˆ์ด์–ด๋ฅผ ์‹ฌ๋Š”โ€ ์ชฝ์— ๊ฐ€๊น๋‹ค.

์™œ ์ง€๊ธˆ ์ด ๋ ˆํฌ๊ฐ€ ๋œจ๋Š”๊ฐ€

๋งŽ์€ ์ž๋™ํ™” ๋„๊ตฌ๊ฐ€ ๋ธŒ๋ผ์šฐ์ € ๋ฐ”๊นฅ์—์„œ ์›€์ง์ธ๋‹ค๋ฉด, PageAgent๋Š” ํŽ˜์ด์ง€ ์•ˆ์œผ๋กœ ๋“ค์–ด๊ฐ„๋‹ค. ๋ฐฑ์—”๋“œ ๋Œ€์ˆ˜์ˆ  ์—†์ด ์ œํ’ˆ ์•ˆ์— AI ์ฝ”ํŒŒ์ผ๋Ÿฟ์„ ์–น๊ณ  ์‹ถ์–ด ํ•˜๋Š” SaaS ํŒ€์—๊ฒŒ ์•„์ฃผ ๋งค๋ ฅ์ ์ธ ๊ทธ๋ฆผ์ด๋‹ค. ๊ฒŒ๋‹ค๊ฐ€ ๋ฉ€ํ‹ฐ๋ชจ๋‹ฌ ์Šคํฌ๋ฆฐ์ƒท ์˜์กด ๋Œ€์‹  ํ…์ŠคํŠธ ๊ธฐ๋ฐ˜ DOM ์กฐ์ž‘์„ ๊ฐ•์กฐํ•˜๋Š” ๊ฒƒ๋„ ์ฐจ๋ณ„์ ์ด๋‹ค.

๋ ˆํฌ ์•ˆ์—์„œ ๋จผ์ € ๋ณผ ๊ฒƒ

  • ์ธํŽ˜์ด์ง€ JavaScript ๋ฐฉ์‹์ด๋ผ ํ†ตํ•ฉ์ด ๊ฐ€๋ณ๋‹ค
  • ํ…์ŠคํŠธ ๊ธฐ๋ฐ˜ DOM ์กฐ์ž‘์œผ๋กœ ์Šคํฌ๋ฆฐ์ƒท ์˜์กด๋„๋ฅผ ๋‚ฎ์ถ˜๋‹ค
  • ์˜ต์…˜์œผ๋กœ Chrome ํ™•์žฅ๊ณผ MCP Server๊นŒ์ง€ ์ œ๊ณตํ•ด ๋ฉ€ํ‹ฐํŽ˜์ด์ง€ ์ž‘์—…๋„ ํ™•์žฅ ๊ฐ€๋Šฅํ•˜๋‹ค

์„ค์น˜ ์ „์— ํ™•์ธํ•  ๊ฒƒ

  • ํ”„๋ก ํŠธ์—”๋“œ ์ฝ”๋“œ์— ์Šคํฌ๋ฆฝํŠธ ๋˜๋Š” npm ํŒจํ‚ค์ง€๋ฅผ ๋ถ™์ผ ์ˆ˜ ์žˆ๋Š” ํ™˜๊ฒฝ
  • ์‚ฌ์šฉํ•  LLM API Key์™€ baseURL
  • ์ฒ˜์Œ ์‹คํ—˜ํ•  ๋‹จ์ผ ํŽ˜์ด์ง€ ํ•˜๋‚˜

์„ค์น˜ ๋ฐฉ๋ฒ•

๊ณต์‹ ํ™•์ธ ๋งํฌ

๊ฐ€์žฅ ๋น ๋ฅธ ์‹คํ—˜: Demo CDN

README ๊ธฐ์ค€ ๊ฐ€์žฅ ๋น ๋ฅธ ์‹œ์ž‘์€ ํŽ˜์ด์ง€์— demo script๋ฅผ ๋ถ™์ด๋Š” ๊ฒƒ์ด๋‹ค.

<script src="https://cdn.jsdelivr.net/npm/page-agent@1.6.1/dist/iife/page-agent.demo.js" crossorigin="true"></script>

์ค‘๊ตญ ๋ฏธ๋Ÿฌ๊ฐ€ ํ•„์š”ํ•˜๋ฉด npmmirror ์ฃผ์†Œ๋ฅผ ์“ธ ์ˆ˜ ์žˆ๋‹ค. ๋‹จ, ์ด ๊ฒฝ๋กœ๋Š” ๋ฌด๋ฃŒ ํ…Œ์ŠคํŠธ LLM API๋ฅผ ์“ฐ๋Š” ๊ธฐ์ˆ  ํ‰๊ฐ€์šฉ์ด๋ฏ€๋กœ ํ”„๋กœ๋•์…˜ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ๋ณด๊ธด ์–ด๋ ต๋‹ค.

์ •์‹ ์„ค์น˜: npm

npm install page-agent

๊ทธ๋‹ค์Œ ์ฝ”๋“œ์—์„œ ๋ถˆ๋Ÿฌ์˜จ๋‹ค.

import { PageAgent } from 'page-agent'
 
const agent = new PageAgent({
  model: 'qwen3.5-plus',
  baseURL: 'https://dashscope.aliyuncs.com/compatible-mode/v1',
  apiKey: 'YOUR_API_KEY',
  language: 'en-US',
})

์–ธ์–ด๋Š” ์‹ค์ œ ์„œ๋น„์Šค ์–ธ์–ด์— ๋งž์ถฐ ์กฐ์ •ํ•˜๋ฉด ๋œ๋‹ค.

์„ค์น˜ ํ™•์ธ

  • ๋ฐ๋ชจ ํŽ˜์ด์ง€ ๋˜๋Š” ๋กœ์ปฌ ํŽ˜์ด์ง€์—์„œ PageAgent ์ธ์Šคํ„ด์Šค๊ฐ€ ์ƒ์„ฑ๋˜๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.
  • API Key ์˜ค๋ฅ˜ ์—†์ด ์ฒซ ๋ช…๋ น์ด ์„œ๋ฒ„๋กœ ์ „๋‹ฌ๋˜๋Š”์ง€ ์ฝ˜์†”์—์„œ ๋ณธ๋‹ค.

์‚ฌ์šฉ ๋ฐฉ๋ฒ•

  1. ์ดˆ๊ธฐ์—๋Š” ํ•œ ํŽ˜์ด์ง€์—์„œ๋งŒ ๋ฒ„ํŠผ ํด๋ฆญ, ์ž…๋ ฅ์ฐฝ ์ฑ„์šฐ๊ธฐ์ฒ˜๋Ÿผ ๋‹จ์ˆœํ•œ ๋ช…๋ น์„ ํ…Œ์ŠคํŠธํ•œ๋‹ค.
  2. ์˜ˆ๋ฅผ ๋“ค์–ด Click the login button ๊ฐ™์€ ๋ช…๋ น์œผ๋กœ ์‹œ์ž‘ํ•œ๋‹ค.
  3. ๋ช…๋ น ์•ˆ์ •์„ฑ์ด ํ™•๋ณด๋˜๋ฉด ํผ ์ฑ„์šฐ๊ธฐ๋‚˜ ์„ค์ • ํ† ๊ธ€์ฒ˜๋Ÿผ ์กฐ๊ธˆ ๋” ๊ธด ์ž‘์—…์œผ๋กœ ํ™•์žฅํ•œ๋‹ค.
  4. ๋ฉ€ํ‹ฐํŽ˜์ด์ง€ ์ด๋™์ด ํ•„์š”ํ•  ๋•Œ๋งŒ Chrome extension์ด๋‚˜ MCP Server๋ฅผ ๊ฒ€ํ† ํ•œ๋‹ค.

๊ณต์‹ README์˜ ๊ฐ€์žฅ ์งง์€ ์˜ˆ์‹œ๋Š” ์•„๋ž˜๋‹ค.

await agent.execute('Click the login button')

์ด ํ•œ ์ค„์ด ๋จนํžˆ๋ฉด ๊ทธ๋‹ค์Œ๋ถ€ํ„ฐ๋Š” ํผ ํ•„๋ง, ๋ฉ”๋‰ด ์ด๋™, ์ ‘๊ทผ์„ฑ ๋ณด์กฐ ๊ฐ™์€ ์‹œ๋‚˜๋ฆฌ์˜ค๋กœ ๋„“ํžˆ๋ฉด ๋œ๋‹ค. ํ•ต์‹ฌ์€ ์ฒ˜์Œ๋ถ€ํ„ฐ 20ํด๋ฆญ์งœ๋ฆฌ ๋ณตํ•ฉ ์ž‘์—…์„ ์‹œํ‚ค์ง€ ์•Š๋Š” ๊ฒƒ์ด๋‹ค.

์–ด๋””์— ๋ฐ”๋กœ ์จ๋จน์„ ์ˆ˜ ์žˆ๋‚˜

์‚ฌ๋ก€ A. ์‚ฌ๋‚ด ERP ํผ ์ž๋™ํ™”

๋ฐ˜๋ณต ์ž…๋ ฅ์ด ๋งŽ์€ ๋ฐฑ์˜คํ”ผ์Šค ํŽ˜์ด์ง€๋ผ๋ฉด โ€œ๊ฑฐ๋ž˜์ฒ˜ ๋“ฑ๋กํ•˜๊ณ  ๊ฒฐ์ œ์กฐ๊ฑด ์„ ํƒํ•ดโ€ ๊ฐ™์€ ์ž์—ฐ์–ด ๋ช…๋ น์„ ๋ถ™์ด๋Š” ์‹คํ—˜์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ์ด๋•Œ ํ•ต์‹ฌ์€ ์‚ฌ๋žŒ์„ ์™„์ „ํžˆ ๋นผ๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ, ๋ฐ˜๋ณต ํด๋ฆญ์„ ์ค„์ด๋Š” ๋ณด์กฐ ๋ ˆ์ด์–ด๋กœ ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

์‚ฌ๋ก€ B. ์ œํ’ˆ ๋‚ด AI ์ฝ”ํŒŒ์ผ๋Ÿฟ

๊ณ ๊ฐ์ด ๋ณต์žกํ•œ ์„ค์ • ํŽ˜์ด์ง€์—์„œ ๊ธธ์„ ์žƒ๋Š” ์ œํ’ˆ์ด๋ผ๋ฉด PageAgent๋กœ โ€œ์ด ๊ธฐ๋Šฅ ์ผœ์ค˜โ€ ๊ฐ™์€ ๋‚ด๋น„๊ฒŒ์ด์…˜ํ˜• ๋„์šฐ๋ฏธ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค. ์ ‘๊ทผ์„ฑ ๋ณด์กฐ๋‚˜ ์Œ์„ฑ ๋ช…๋ น ์—ฐ๋™์—๋„ ์ž˜ ์–ด์šธ๋ฆฐ๋‹ค.

์ฒ˜์Œ ํ•ด๋ณผ ์ตœ์†Œ ์‹คํ—˜

  1. ๋‹จ์ผ ํŽ˜์ด์ง€๋ฅผ ํ•˜๋‚˜ ๊ณ ๋ฅธ๋‹ค.
  2. CDN ๋˜๋Š” npm ์ค‘ ๋” ๋น ๋ฅธ ๊ฒฝ๋กœ๋กœ ๋ถ™์ธ๋‹ค.
  3. Click the login button ์ˆ˜์ค€์˜ ๋‹จ์ˆœ ๋ช…๋ น 1~2๊ฐœ๋งŒ ์‹คํ–‰ํ•œ๋‹ค.
  4. ์˜ค์ž‘๋™ ์š”์†Œ๋ฅผ ๊ธฐ๋กํ•œ ๋’ค DOM ๊ตฌ์กฐ๋ฅผ ์ •๋ฆฌํ•˜๊ฑฐ๋‚˜ ํ”„๋กฌํ”„ํŠธ๋ฅผ ์ขํ˜€๋ณธ๋‹ค.

๊ฒ€์ฆ ํฌ์ธํŠธ๋Š” ๊ฐ„๋‹จํ•˜๋‹ค. ์ž˜ ๋˜๋Š”์ง€ ๋ณผ ๋•Œ๋Š” ๋ฐ๋ชจ ์„ฑ๊ณต๋ณด๋‹ค ์‹ค์ œ ์ œํ’ˆ ํŽ˜์ด์ง€์—์„œ ์˜ค์ž‘๋™ ์—†์ด ๋™์ผ ๋ช…๋ น์„ ์–ผ๋งˆ๋‚˜ ์•ˆ์ •์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๋Š”์ง€ ํ™•์ธํ•ด์•ผ ํ•œ๋‹ค.

๋ณผ ๋•Œ ์ฃผ์˜ํ•  ์ 

  • ํด๋ผ์ด์–ธํŠธ์‚ฌ์ด๋“œ ๊ฐœ์„ ์šฉ์ด์ง€ ์„œ๋ฒ„ ์ž๋™ํ™” ๋งŒ๋Šฅ ๋„๊ตฌ๋Š” ์•„๋‹ˆ๋‹ค.
  • ํŽ˜์ด์ง€ ๊ตฌ์กฐ๊ฐ€ ์ž์ฃผ ๋ฐ”๋€Œ๋ฉด ๋ช…๋ น ์•ˆ์ •์„ฑ์ด ๋–จ์–ด์งˆ ์ˆ˜ ์žˆ๋‹ค.
  • ๋ฌด๋ฃŒ ํ…Œ์ŠคํŠธ LLM API๋Š” ๊ธฐ์ˆ  ํ‰๊ฐ€์šฉ์ด๋ผ๋Š” ์ ์„ ๋ช…ํ™•ํžˆ ๋ด์•ผ ํ•œ๋‹ค.

๋‹ค์Œ ์ฝ๊ธฐ

์ด ๊ธ€์€ AI๋ฅผ ํ™œ์šฉํ•ด ์ดˆ์•ˆ์„ ์ •๋ฆฌํ–ˆ๊ณ , GitHub README์™€ ๊ณต์‹ ๋งํฌ๋ฅผ ๋‹ค์‹œ ํ™•์ธํ•ด ์‹ค๋ฌด ์ ์šฉ ๊ด€์ ์œผ๋กœ ํ’€์–ด์ผ๋‹ค.