PowerScan
TH

ทำงานอัตโนมัติกับโปรไฟล์เบราว์เซอร์ด้วย Local API

ระบบอัตโนมัติ · อ่าน 8 นาที · โดย PowerOps

ภาพ: Unsplash

เริ่มโปรไฟล์จากสคริปต์ รับเอนด์พอยต์สำหรับดีบักกลับมา แล้วเชื่อม Playwright หรือ Puppeteer เข้ากับเบราว์เซอร์ที่มีตัวตนและพร็อกซีติดมาแล้ว

การทำงานอัตโนมัติกับเบราว์เซอร์ antidetect มักถูกนำเสนอว่าเป็นปัญหายาก แต่ไม่ใช่ ตราบใดที่เครื่องมือยื่นสิ่งเดียวที่ไลบรารีอัตโนมัติของคุณรู้จักใช้อยู่แล้วให้ คือเอนด์พอยต์สำหรับดีบัก

ภาพรวม

PowerOps รัน HTTP API ที่ผูกกับที่อยู่ loopback สคริปต์ของคุณขอให้มันเริ่มโปรไฟล์ มันเปิดเบราว์เซอร์พร้อมตัวตน พื้นที่จัดเก็บ และพร็อกซีของโปรไฟล์นั้นที่ติดมาแล้ว และคืนเอนด์พอยต์ WebSocket ของเบราว์เซอร์ที่กำลังทำงาน สคริปต์ของคุณเชื่อมต่อกับเอนด์พอยต์นั้นด้วย Playwright, Puppeteer หรืออะไรก็ตามที่พูดโปรโตคอล DevTools ได้

ไลบรารีอัตโนมัติไม่ต้องรู้เลยว่าลายนิ้วมือคืออะไร เมื่อมันเชื่อมต่อ สภาพแวดล้อมก็พร้อมแล้ว

การเริ่มโปรไฟล์

curl -s -H "Authorization: Bearer $POWEROPS_API_KEY" \
  http://127.0.0.1:50326/status

ทุกเส้นทางยกเว้นการตรวจสถานะต้องใช้คีย์ bearer การเริ่มเบราว์เซอร์จะคืนเอนด์พอยต์ที่ใช้เชื่อมต่อ

curl -s -X POST \
  -H "Authorization: Bearer $POWEROPS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"profileId": "..."}' \
  http://127.0.0.1:50326/browser/start

การเชื่อมไลบรารีของคุณ

import { chromium } from "playwright";

const res = await fetch("http://127.0.0.1:50326/browser/start", {
  method: "POST",
  headers: {
    "Authorization": `Bearer ${process.env.POWEROPS_API_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({ profileId }),
});

const { ws } = await res.json();

// The profile's identity, storage and proxy are already in place.
const browser = await chromium.connectOverCDP(ws);
const [context] = browser.contexts();
const page = context.pages()[0] ?? await context.newPage();

await page.goto("https://example.com");

บรรทัดสำคัญคือคอมเมนต์ ในสคริปต์ของคุณไม่มีการตั้งค่าลายนิ้วมือเลย เพราะการตั้งค่าสภาพแวดล้อมไม่ใช่หน้าที่ของสคริปต์ มันเป็นของโปรไฟล์ และคงเดิมไม่ว่าโปรไฟล์จะถูกเปิดโดยคนคลิกแถว หรือโดยงานตามกำหนดเวลาตอนตีสาม

API ครอบคลุมอะไรบ้าง

วิธีรักษาให้อยู่ในเครื่อง

API ที่ควบคุมเบราว์เซอร์ซึ่งถือบัญชีที่ล็อกอินไว้ควรพูดถึงขอบเขตของมันสักหน่อย

รูปแบบที่ควรคัดลอก

สอบถามโปรไฟล์ในกลุ่ม เริ่มทีละตัว ทำงาน แล้วหยุด รันทีละไม่กี่ตัวแทนที่จะรันพร้อมกันทั้งหมด ข้อจำกัดคือหน่วยความจำของเครื่องคุณเอง เพราะแต่ละโปรไฟล์คือกระบวนการเบราว์เซอร์จริง

const { profiles } = await api("/profiles?groupId=" + groupId);

for (const batch of chunk(profiles, 5)) {
  await Promise.all(batch.map(async (profile) => {
    const { ws } = await api("/browser/start", { profileId: profile.id });
    try {
      await doTheWork(ws);
    } finally {
      await api("/browser/stop", { profileId: profile.id });
    }
  }));
}

การหยุดโปรไฟล์ใน `finally` สำคัญกว่าที่เห็น เพราะการปิดอย่างเรียบร้อยคือสิ่งที่เขียนสถานะเบราว์เซอร์ออก และโปรไฟล์ที่ถูกฆ่ากลางเซสชันอาจเสียเซสชันที่เพิ่งสร้างขึ้น

บทความทั้งหมด · เริ่มการสแกน