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

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
- Durum rotası bir sağlık denetimidir ve anahtar gerektirmeyen tek rotadır.
- Tarayıcı rotaları, o anda çalışan tarayıcıları başlatır, durdurur ve sorgular.
- Profil rotaları profilleri oluşturur, günceller, sorgular ve siler.
- Proxy rotaları proxy kütüphanesini yönetir ve rotaları atar.
- Grup rotaları profilleri toplu olarak düzenler.
- Eklenti rotaları eklentileri içe aktarır ve atar.
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.
- 127.0.0.1'e bağlanır. Onu başka bir arayüzde dinletecek hiçbir ayar yoktur.
- Durum denetimi dışındaki her rotada bir bearer anahtarı gerekir.
- Host başlığını doğrular ve hiçbir CORS başlığı göndermez; böylece gündelik tarayıcınızda açık bir web sayfası ona ulaşamaz.
- Gizli bilgiler salt yazılırdır: profil parolaları, iki adımlı doğrulama sırları ve proxy parolaları hiçbir sorgu rotasından asla döndürülmez.
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.
