PowerScan
TR

Tarayıcı Profillerini Yerel Bir API ile Otomatikleştirmek

Otomasyon · 8 dk okuma · yazan: PowerOps

Fotoğraf: Unsplash

Bir betikten profil başlatın, bir hata ayıklama uç noktası alın ve Playwright ya da Puppeteer'ı kimliği ve proxy'si zaten takılı bir tarayıcıya bağlayın.

Bir antidetect tarayıcıyı otomatikleştirmek genellikle zor bir sorun olarak sunulur. Öyle değildir; yeter ki araç, otomasyon kütüphanenizin zaten nasıl kullanılacağını bildiği tek şeyi elinize versin: bir hata ayıklama uç noktası.

Genel yapı

PowerOps, geri döngü adresine bağlı bir HTTP API çalıştırır. Betiğiniz ondan bir profil başlatmasını ister; o da tarayıcıyı o profilin kimliği, depolaması ve proxy'si zaten takılı olarak başlatır ve çalışan tarayıcının WebSocket uç noktasını döndürür. Betiğiniz bu uç noktaya Playwright, Puppeteer veya DevTools protokolünü konuşan başka herhangi bir şeyle bağlanır.

Otomasyon kütüphanesinin parmak izinin ne olduğunu bilmesine hiç gerek yoktur. O bağlandığında ortam zaten kurulmuştur.

Bir profil başlatmak

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

Durum denetimi dışındaki her rota bir bearer anahtarı gerektirir. Bir tarayıcı başlatmak, bağlanılacak uç noktayı döndürür:

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

Kütüphanenizi bağlamak

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");

Önemli satır yorum satırıdır. Betiğinizde hiçbir parmak izi yapılandırması yoktur, çünkü ortamı yapılandırmak betiğinizin işi değildir. O profile aittir ve profil ister bir satıra tıklayan bir kişi ister gece üçte çalışan zamanlanmış bir iş tarafından açılsın, aynı kalır.

API neleri kapsıyor

Yerel nasıl tutulur

Açık oturumlu hesapları tutan tarayıcıları süren bir API, sınırları hakkında bir sözü hak eder.

Kopyalamaya değer bir örüntü

Bir gruptaki profilleri sorgulayın, her birini başlatın, işi yapın, durdurun. Hepsini birden değil, birkaçını aynı anda çalıştırın. Kısıt kendi makinenizdeki bellektir, çünkü her profil gerçek bir tarayıcı sürecidir.

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 });
    }
  }));
}

Profili bir `finally` içinde durdurmak göründüğünden daha önemlidir: temiz kapatma tarayıcı durumunu yazan şeydir ve oturum ortasında sonlandırılan bir profil, yeni kurduğu oturumu kaybedebilir.

Tüm makaleler · Taramayı başlat