bauta문서

Puppeteer 연결

게이트웨이를 거쳐 Puppeteer를 페르소나에 연결하거나, Node.js 패키지로 페르소나를 실행합니다.

Puppeteer는 게이트웨이에 있는 페르소나의 WebSocket 엔드포인트에 연결합니다. 연결 호출만 바뀌고 나머지 코드는 그대로입니다.

게이트웨이 시작

bauta를 설치하고 설정했다면(시작하기), 페르소나를 만들고 게이트웨이를 시작합니다.

bauta geo update                              # 프록시 출구 위치를 찾는 데이터베이스
bauta persona new shop --from win-intel
bauta serve

이제 페르소나마다 자기 엔드포인트 ws://127.0.0.1:9222/persona/<name>이 생깁니다.

연결

const puppeteer = require("puppeteer-core");

const browser = await puppeteer.connect({ browserWSEndpoint: "ws://127.0.0.1:9222/persona/shop" });
const page = await browser.newPage();
await page.goto("https://example.com");
console.log(await page.evaluate(() => navigator.platform)); // Win32
await browser.disconnect();

클라이언트에는 자기 페르소나의 페이지만 보이며, 브라우저를 혼자 쓰는 것과 같습니다. 페르소나는 자기 프로필을 가지므로, 다음에 연결할 때도 쿠키와 저장소가 그대로 있습니다. 페르소나의 브라우저는 마지막 클라이언트가 떠나고 30초 뒤에 닫히며, bauta serve --idle로 바꿀 수 있습니다.

Node.js 패키지로 실행

bautabrowser/puppeteer는 이 머신의 게이트웨이에 연결하거나 직접 시작하고, 페르소나를 만들어 연결합니다.

npm install bautabrowser puppeteer-core
const { launch } = require("bautabrowser/puppeteer");

const browser = await launch({ proxy: "http://user:pass@host:port", humanize: true });
const page = await browser.newPage();
await page.goto("https://example.com");
await browser.disconnect();

옵션은 패키지의 Playwright용 launch()와 같습니다(Python·Node.js 패키지). name 없이 실행하면 아무것도 남기지 않는 새 정체성을 받습니다. 실행 사이에 페르소나의 쿠키와 저장소를 유지하려면 이름을 주고 ephemeral을 false로 설정합니다.

const browser = await launch({ name: "shop", ephemeral: false });

번들된 모든 페르소나는 navigator.webdriver에 false로 답하므로, 자동화된 실행이 스스로를 드러내지 않습니다.

클릭과 사용자 활성화

스크립트로 실행한 동작은 사람이 아니라 페이지가 한 것입니다. page.evaluate 같은 호출은 페이지에 사용자 활성화(user activation)를 주지 않습니다. 사용자 활성화는 사람의 클릭이나 키 입력으로, Chrome은 팝업을 열거나 전체 화면으로 바꾸거나 클립보드에 쓸 때 이를 요구합니다. 이런 호출에 활성화를 준다면, 페이지는 아무 입력도 없이 생긴 활성화를 보게 됩니다. 사람이 필요한 동작에는 클릭을 쓰세요.

await page.click("#open");

humanize를 켠 페르소나는 클릭과 타이핑이 사람 손처럼 움직입니다.

페르소나의 정체성은 고정됩니다

클라이언트가 자체 User-Agent, 뷰포트, 로캘, 시간대를 설정하면 설정한 것처럼 응답하지만, 페이지에는 페르소나의 값이 그대로 보입니다.

다음

이 페이지 내용