Playwright i Puppeteer su dva najpopularnija alata za automatizaciju pregledača, ali se razlikuju po performansama i mogućnostima. U ovom članku ćemo ih uporediti kako bismo vam pomogli da odlučite koji odgovara vašim potrebama. Međutim, važno je zapamtiti da, kako veb lokacije postaju teže dostupne automatizovanim skriptama, efikasnost koda je samo polovina bitke. Zato ćemo takođe razgovarati o tome kako mogu pomoći da se izbegnu prekidi i pouzdano skalira automatizacija, uz linkove ka namenskim vodičima za integraciju za obe biblioteke. proxy rešenja Šta je Playwright? Playwright je moderan, otvoreni okvir razvijen od strane Microsofta za end-to-end testiranje i automatizaciju pregledača. Omogućava programerima da komuniciraju sa veb aplikacijama preko svih modernih motora – Chromium (Chrome i Edge), Firefox i WebKit (Safari-jev motor) – na Windows, Linux i macOS. Iako je izgrađen na , Playwright podržava više programskih jezika, uključujući JavaScript, TypeScript, Python, Java i .NET (C#), što ga čini sveobuhvatnim alatom za timove sa raznolikim tehnološkim slojevima. Za veb grebanje, Playwright-ova sposobnost da upravlja sa više izolovanih konteksta pregledača (svaki sa svojim kolačićima i proxy postavkama) omogućava visoko efikasno, paralelno izdvajanje podataka bez režijskih troškova memorije više procesa pregledača. Node.js Ključna snaga Playwright-a je njegova pouzdanost. Sadrži automatsko čekanje, koje osigurava da su elementi upotrebljivi pre izvođenja interakcije, značajno smanjujući krhkost testova. Takođe podržava pregledanje više konteksta, omogućavajući vam da izolujete više stranica ili iframe-ova unutar iste sesije pregledača. Pored osnovne automatizacije, nudi izvornu intercepciju mreže, snimanje video zapisa i emulaciju mobilnih uređaja. Iako je relativno nov u poređenju sa Puppeteer-om, Playwright je brzo postao lider u ovoj oblasti. Njegova sposobnost da pruži dosledne, ukrštene rezultate pregledača i njegov moćni ugrađeni trkač testova čine ga vrhunskim izborom za moderan veb razvoj. Šta je Puppeteer? Puppeteer je otvorena biblioteka koju je razvio Google za automatizaciju Chrome i Chromium baziranih pregledača. Izgrađen je prvenstveno na Chrome DevTools protokolu (CDP), dajući programerima kontrolu nad internim procesima pregledača, čineći ga laganim, brzim i visoko optimizovanim za zadatke specifične za Chrome. Node.js Puppeteer radi u režimu bez glave i sa glavom. To je standardni alat za veb grebanje, generisanje PDF-ova i automatsko snimanje ekrana. Zbog svoje čvrste integracije sa Chromium motorom, često dobija pristup novim funkcijama pregledača pre drugih okvira za automatizaciju. Dok Puppeteer briljira u Chromium ekosistemu (uključujući Microsoft Edge), njegove mogućnosti ukrštenog pregledača su ograničenije od konkurenata poput Playwright-a. Na primer, iako sada pruža stabilnu podršku za Firefox putem projekta WebDriver BiDi, i dalje mu nedostaje izvornu podršku za WebKit (Safari). Puppeteer je izgrađen posebno za Node.js ekosistem i zvanično podržava samo JavaScript i TypeScript. Iako postoje nezvanični portovi poput Pyppeteer-a za Python, ovi projekti zajednice često nemaju česta ažuriranja koja pruža osnovna biblioteka. Uprkos ovoj užoj podršci za jezike, Puppeteer ostaje jedan od vodećih izbora zbog svoje jednostavnosti, brzine i velike podrške zajednice za automatizaciju usredsređenu na Chrome. Playwright vs. Puppeteer: sumarno poređenje Za one koji traže brz odgovor, evo TL:DR tabele poređenja Playwright vs. Puppeteer: Funkcija Playwright Puppeteer Primarni cilj Ukršteni pregledač E2E testiranje, automatizacija i grebanje Fokusirana Chromium automatizacija i grebanje Podržane platforme Windows, macOS, Linux Windows, macOS, Linux Podrška za jezike JavaScript, TypeScript, Python, Java, .NET (C#) JavaScript i TypeScript Podrška za pregledače Chromium, Firefox, WebKit Chromium, Firefox (preko WebDriver BiDi) Arhitektura Upravljač zasnovan na WebSocket-u (apstrahuje sve protokole) Chrome DevTools protokol (CDP) / WebDriver BiDi Klijent Asinhroni i sinhroni Asinhroni Konfiguracija režima Režim sa glavom i bez glave (oba prvoklasna) Režim sa glavom i bez glave (oba prvoklasna) Dokumentacija Dobra; fokus na testiranje i otklanjanje grešaka Odlična; zrela i jednostavna Podrška zajednice Ogroman ekosistem; opsežna zajednica Ogroman ekosistem; opsežna zajednica Strategija čekanja Automatsko čekanje (ugrađena pouzdanost) Ručno čekanje (zahteva ) waitForSelector Poređenje podrške za pregledače Najočiglednija prednost Playwright-a je njegova izvornu podrška za sva tri glavna motora pregledača: Chromium, Firefox i WebKit. Potonje čini Playwright-a izborom za programere koji žele da osiguraju da njihove veb aplikacije savršeno funkcionišu na iOS-u ili macOS-u, jer može da simulira ponašanje Safari-ja preko WebKit-a na bilo kom operativnom sistemu. Nasuprot tome, Puppeteer ostaje biblioteka usredsređena na Chromium. Iako je stabilizovan i zvanično pokrenuo prvoklasnu podršku za Firefox putem protokola WebDriver BiDi, i dalje mu nedostaje izvornu podršku za WebKit. Ako vam je potrebno testiranje za Safari ili tražite iskustvo ukrštenog pregledača, Playwright je i dalje jasni pobednik. Dve biblioteke se takođe razlikuju po načinu na koji kontrolišu pregledače. Playwright isporučuje sopstvene "zakrpljene" verzije binarnih datoteka pregledača. Ove zakrpe omogućavaju Playwright-u da izloži API-je niskog nivoa koji nisu dostupni u standardnim pregledačima. Takođe omogućava funkcije poput automatskog čekanja i napredne intercepcije mreže. Međutim, postoji kvaka. Pošto su ovi pregledači modifikovani, postoji teoretski rizik da će test proći u zakrpljenom Playwright pregledaču, ali ne i u stvarnom pregledaču. Puppeteer, s druge strane, prvobitno je izgradio svoju reputaciju na Chrome DevTools protokolu (CDP). Danas se kreće ka WebDriver BiDi, novom industrijskom standardu. Ovo u osnovi znači da Puppeteer radi bliže sa verzijama pregledača koje obezbeđuju prodavci, što se često prevodi u bolju dugoročnu stabilnost i niži rizik od lažnih pozitivnih rezultata tokom testiranja. Opcije programskog jezika Alat je samo onoliko korisniji koliko je kompatibilan sa postojećim znanjem vašeg tima. Zato, kada je reč o izboru programskog jezika, izbor između Playwright-a i Puppeteer-a svodi se na vaš tehnološki sloj. Playwright je dizajniran sa poliglotskom filozofijom – izgrađen je tako da bude dostupan skoro svakom modernom razvojnom timu. Iako je osnovni motor napisan u TypeScript/ , Microsoft pruža i održava kvalitetne jezičke veze za JavaScript, TypeScript, Python, Java i C#/.NET. Štaviše, budući da su ovo zvanične veze, dobijate paritet funkcija preko svih jezika – funkcija objavljena za je skoro odmah dostupna korisnicima Pythona ili Jave. Node.js Node.js Puppeteer, s druge strane, striktno je biblioteka dizajnirana za JavaScript i TypeScript. Ako radite unutar JS ekosistema, Puppeteer će se osećati kao izvorni dodatak vašem radnom toku. Ali ako ste Python programer, loše ste sreće sa zvaničnom Puppeteer bibliotekom. Da, postoje nezvanični portovi poput Pyppeteer-a za Python, ali to su samo projekti koje pokreće zajednica i koji se više ne održavaju. Node.js Proces instalacije i podešavanja Sada, pogledajmo kako možemo koristiti Playwright i Puppeteer za obavljanje osnovnog zadatka veb grebanja. Preduslovi Da biste započeli, moraćete da instalirate (Node Package Manager) na svoju mašinu. To možete učiniti prateći ovaj . npm link Zatim možete otvoriti svoj terminal i pokrenuti ove komande da biste kreirali novi folder i inicijalizovali novi Node projekat. Ovo obično kreira fajl unutar direktorijuma. package.json mkdir playwright-pupeteer cd playwright-pupeteer npm init -y Instaliranje biblioteka Sada kada je projekat podešen, instalirajmo i Playwright i Puppeteer u trenutni projekat. To možete učiniti pokretanjem ovih komandi: npm install puppeteer npm install playwright npx playwright install Kao što vidite, moramo pokrenuti dodatnu komandu prilikom instaliranja Playwright-a. To je zato što Playwright ne uključuje podrazumevano upakovan pregledač. Morate pokrenuti poslednju prikazanu komandu da biste instalirali podrazumevane pregledače koje nudi. npx playwright install Puppeteer, s druge strane, podrazumevano uključuje Chrome; stoga nije potrebna dodatna komanda. Grebanje veb lokacije sa Playwright-om Sada kada je naše podešavanje završeno, pogledajmo kako možete koristiti Playwright za grebanje veb lokacije. Mi ćemo koristiti kao cilj grebanja za ovaj primer. Budući da sandbox oponaša e-trgovinu, grebaćemo naslov i status zaliha svakog predmeta na stranici. Oxylabs Sandbox Počnimo kreiranjem JavaScript fajla pod nazivom unutar foldera vašeg projekta. Kada ga imate, trebalo bi da uvezete zavisnost iz Playwright paketa. Evo kako bi to trebalo da izgleda: playwright.js chromium import { chromium } from 'playwright'; Zatim, obavimo početne korake većine Playwright aplikacija: otvaranje pregledača i navigacija do veb lokacije. Možemo početi definisanjem URL-a sandbox-a za grebanje u promenljivoj ovako: const URL = 'https://sandbox.oxylabs.io/products'; Sada, pokrenimo pregledač i otvorimo novu stranicu ovako: const browser = await chromium.launch(); const page = await browser.newPage(); Kada imamo inicijalizovanu promenljivu stranice, možemo započeti proces grebanja. Dodajte ove redove da biste navigirali stranicu do prethodno definisanog URL-a: await page.goto(URL); await page.waitForLoadState('networkidle'); Drugi red osigurava da su sve komponente učitane pre nego što počnemo sa grebanjem, tako da nećemo propustiti potrebne podatke. Sada kada su podaci učitani, možemo koristiti jednostavan CSS selektor za odabir svakog proizvoda sa veb lokacije. Svaki proizvod u sandbox-u ima CSS klasu , pa ćemo je koristiti kao naš selektor. .product-card Da bismo to uradili, hajde da kreiramo anonimnu funkciju za metod objekta stranice koja na kraju vraća svaki proizvod iz grebanih podataka. Trebalo bi da izgleda ovako: evaluate const products = await page.evaluate(() => { }) Unutar anonimne funkcije, upitajmo svaki proizvod na stranici ovako: const products = await page.evaluate(() => { const productCards = document.querySelectorAll('.product-card'); }) Zatim, trebalo bi da iteriramo preko svake kartice proizvoda i mapiramo naslov i status zaliha u novi objekat. Budući da status zaliha nema zajedničku CSS klasu, odabraćemo tekst i odvojeno i uporediti ih da bismo utvrdili koji postoji. Evo kako bi to trebalo da izgleda: Out of Stock In Stock const products = await page.evaluate(() => { const productCards = document.querySelectorAll('.product-card'); return Array.from(productCards).map(card => { const inStock = card.querySelector('p.in-stock')?.innerText; const outOfStock = card.querySelector('p.out-of-stock')?.innerText; const title = card.querySelector('h4.title')?.innerText; return { title: title, stockStatus: inStock ? 'In Stock' : outOfStock ? 'Out of Stock' : '' }; }); }) Nakon toga, možemo da ispišemo vraćene proizvode jednostavnom izjavom za ispis i zatvorimo pregledač ovako: console.log(products); await browser.close() Ako pokrenete kod, trebalo bi da vidite nešto slično ovome u svom terminalu: [ { title: 'The Legend of Zelda: Ocarina of Time', stockStatus: 'In Stock' }, { title: 'Super Mario Galaxy', stockStatus: 'Out of Stock' }, { title: 'Super Mario Galaxy 2', stockStatus: 'In Stock' }, { title: 'Metroid Prime', stockStatus: 'Out of Stock' }, { title: 'Super Mario Odyssey', stockStatus: 'In Stock' }, { title: 'Halo: Combat Evolved', stockStatus: 'Out of Stock' }, ... ] Evo kako bi trebalo da izgleda ceo skript: import { chromium } from 'playwright'; const URL = 'https://sandbox.oxylabs.io/products'; const browser = await chromium.launch(); const page = await browser.newPage(); await page.goto(URL); await page.waitForLoadState('networkidle'); const products = await page.evaluate(() => { const productCards = document.querySelectorAll('.product-card'); return Array.from(productCards).map(card => { const inStock = card.querySelector('p.in-stock')?.innerText; const outOfStock = card.querySelector('p.out-of-stock')?.innerText; const title = card.querySelector('h4.title')?.innerText; return { title: title, stockStatus: inStock ? 'In Stock' : outOfStock ? 'Out of Stock' : '' }; }); }); console.log(products); await browser.close(); Zatim, pogledajmo kako bismo obavili isti zadatak koristeći Puppeteer. Grebanje veb lokacije sa Puppeteer-om Da bismo počeli, kreirajmo još jedan fajl u istom direktorijumu pod nazivom . puppeteer.js Kada ga imate, možete ga otvoriti i uvesti biblioteku. Kao što je ranije pomenuto, Puppeteer uključuje Chrome, tako da ne moramo da uvozimo dodatnu zavisnost za pregledač. Uvoz na ovaj način je dovoljan: puppeteer puppeteer import puppeteer from "puppeteer"; Ostatak skripta ostaje uglavnom isti kao u Playwright primeru, osim nekih malih razlika. Kao i ranije, pokrećemo pregledač, otvaramo stranicu, navigiramo do URL-a sandbox-a za grebanje i grebemo podatke. Evo kako bi to trebalo da izgleda: import puppeteer from "puppeteer"; const URL = "https://sandbox.oxylabs.io/products"; const browser = await puppeteer.launch(); const page = await browser.newPage(); await page.goto(URL); await page.waitForNetworkIdle(); const products = await page.evaluate(() => { const productCards = document.querySelectorAll(".product-card"); return Array.from(productCards).map((card) => { const inStock = card.querySelector("p.in-stock")?.innerText; const outOfStock = card.querySelector("p.out-of-stock")?.innerText; const title = card.querySelector("h4.title")?.innerText; return { title: title, stockStatus: inStock ? "In Stock" : outOfStock ? "Out of Stock" : "", }; }); }); console.log(products); await browser.close(); Sličnosti i razlike Jedina razlika između ovih primera je način na koji svaka biblioteka obrađuje čekanje promene mrežnog stanja. U Playwright-u, moramo eksplicitno da navedemo za koje mrežne stanje čekamo u argumentu metode, ovako: await page.waitForLoadState("networkidle"); Dok Puppeteer izlaže zasebnu metodu za čekanje da mreža postane neaktivna, ovako: await page.waitForNetworkIdle(); Naravno, više razlika će postati očigledno kako budete rešavali naprednije slučajeve upotrebe. Međutim, ovaj mali primer pokazuje da, pored nekih funkcionalnih razlika, i Playwright i Puppeteer obavljaju iste osnovne zadatke na sličan način. Dizajn API-ja i jednostavnost upotrebe Ako ste ikada napisali skriptu za pregledač koja savršeno radi na vašoj mašini, ali se povremeno ruši u oblaku, iskusili ste krhkost. Način na koji obe ove biblioteke obrađuju tajming učitavanja stranice je najveći faktor u tome koliko će vaš razvojni proces biti frustrirajući (ili gladak). Playwright je izgrađen da reši problem krhkosti, uvodeći dva koncepta: – u većini alata za automatizaciju, ako kažete skripti da „klikne na dugme za prijavljivanje“, ona bi mogla pokušati da ga klikne pre nego što se dugme završi sa učitavanjem, uzrokujući da se skripta sruši. Playwright automatski čeka da element postane upotrebljiv – proverava da li je dugme vidljivo, stabilno i omogućeno – pre nego što pokuša da klikne. Automatsko čekanje – lokator je način opisivanja kako pronaći element (na primer, „pronađi dugme koje kaže Pošalji“). Za razliku od starijih metoda koje jednom pronađu element i zatim ga izgube ako se stranica osveži, Playwright Lokator ostaje aktivan i ponovo će pronaći element kad god vam je potreban. Lokatori Puppeteer je više ručni – daje vam alate za interakciju sa pregledačem, ali ne radi toliko teškog posla za vas. Na primer, u Puppeteer-u, morate eksplicitno da kažete skripti kada da čeka. Nekoliko trenutaka kasnije, naći ćete se kako pišete nešto poput pre skoro svake akcije. Ako zaboravite komandu za čekanje ili se sajt učitava duže nego obično, vaša skripta će verovatno propasti. Dakle, možda dobijate više kontrole, ali takođe morate da napišete više redova koda da biste obradili iste zadatke koje Playwright obrađuje automatski. await page.waitForSelector('.login-btn') Performanse i brzina Ne postoji jedinstveno međunarodno dogovoreno mišljenje kada je reč o najbržoj biblioteci, jer to u potpunosti zavisi od obima vašeg projekta. Međutim, oba alata su definitivno brža od starijih okvira, kao što je Selenium, ali imaju različite profile performansi. Puppeteer je često idealan za kratke, jednokratne skripte ili projekte. Budući da je lagana biblioteka sa direktnom vezom niskog nivoa sa Chromium-om, ima vrlo malo režijskih troškova. S obzirom na brzinu pokretanja, Puppeteer može pokrenuti pregledač i izvršiti jednostavnu komandu (na primer, snimanje ekrana jedne stranice) brže od Playwright-a u mnogim merenjima. Zašto? Zato što nema dodatne slojeve koje Playwright koristi za podršku više jezika i tipova pregledača. Dakle, ako vam je cilj da pokrenete hiljade malih i nezavisnih zadataka, teško je pobediti Puppeteer. Obrnuto, Playwright je mnogo efikasniji u složenim, scenarijima sa više stranica zahvaljujući svojoj funkciji BrowserContexts. Uporedimo ga sa Puppeteer-om: u Puppeteer-u, ako želite da pokrenete 10 različitih sesija grebanja sa potpunom izolacijom, morate pokrenuti 10 zasebnih procesa pregledača. Ovaj proces se smatra teškim i troši značajan RAM. Ono što vam Playwright omogućava je da pokrenete jedan proces pregledača i kreirate desetine izolovanih konteksta unutar njega – svaki kontekst se ponaša kao potpuno nov prozor pregledača, ali deli istu osnovnu memoriju. Kao rezultat, Playwright koristi značajno manje CPU-a i memorije od Puppeteer-a kada skalira pri velikom obimu. Dokumentacija i podrška zajednice Puppeteer je dugo bio industrijski standard, ali Playwright je brzo postavio nove standarde za to kako treba dokumentovati razvojne alate. Puppeteer, smatra se zrelim veteranom, ima višegodišnju prednost, što mu je pomoglo da stvori ogromnu bazu znanja na internetu. Na primer, ako naiđete na čudnu grešku u Puppeteer-u, velika je verovatnoća da ju je neko drugi rešio pre tri godine na Stack Overflow-u ili GitHub-u. Pored toga, budući da Puppeteer postoji tako dugo, zajednica je izgradila specijalizovane alate koji nisu zvanično podržani. Sve u svemu, Puppeteer-ova dokumentacija je jednostavna – to je biblioteka, a njeni dokumenti odražavaju tu jednostavnost. Iako je Playwright mlađi, podržan je ogromnim resursima Microsofta. Njegova dokumentacija ne samo da vam govori kako da kliknete na dugme – ona pruža detaljne, ilustrovane vodiče o modernim izazovima. Budući da Playwright uključuje prvoklasne alate, plugins zajednice su manje potrebni. Bezbedno je reći da je danas Playwright prevazišao Puppeteer u pružanju sigurnosne mreže za programere – dok Playwright možda ima manje blog postova o starim nišama, njegova zvanična dokumentacija je toliko temeljna da retko morate da tražite negde drugde. Mogućnosti veb grebanja Moderne veb lokacije retko su samo statički HTML više – one su dinamičke aplikacije koje učitavaju podatke dok skrolujete ili klikćete. Da biste efikasno grebali ove veb lokacije, potreban vam je alat koji može razmišljati i delovati kao pravi ljudski pregledač. I dok su i Playwright i Puppeteer odlični u izdvajanju podataka, oni predstavljaju različite strategije. Obrada dinamičkog sadržaja Obe biblioteke dobro obrađuju sadržaj intenzivan u JavaScriptu, ali se razlikuju po tome kako čekaju podatke. Zbog svog ugrađenog automatskog čekanja, Playwright je otporan prilikom grebanja sajtova koji učitavaju podatke nepredvidivim brzinama. Neće pokušati da grebe naslov proizvoda ili oznaku cene dok se potpuno ne prikaže i ne postane vidljiv, što čini vaše grebače manje verovatnim da će se pokvariti tokom sporog skoka mreže. Puppeteer vam daje kontrolu. Ako trebate da presretnete određeni mrežni zahtev u trenutku kada se dogodi, Puppeteer-ova integracija sa Chrome DevTools protokolom (CDP) pruža nivo kontrole koji napredni programeri zahtevaju. Skaliranje Kada trebate da grebete 10 hiljada stranica, performanse se svode na brojeve. Playwright, sa svojom funkcijom BrowserContext, generalno je pobednik za skaliranje: možete pokrenuti stotine izolovanih sesija grebanja unutar jednog procesa pregledača, poboljšavajući efikasnost grebanja. Puppeteer je često brži za jednostavna, grebanja jedne stranice: ako samo trebate da brzo dobijete jednu informaciju sa jedne stranice, Puppeteer-ov niži režijski trošak mu daje blagu prednost u brzini. Blokovi Većina glavnih veb lokacija koristi sofisticirane mere za otkrivanje automatizovanih skripti. Zato danas najveći izazov u veb grebanju nije kod – to su blokovi. Dok Puppeteer ima "Stealth" plugin vođen zajednicom, i Playwright vam omogućava da koristite Firefox ili WebKit za zaobilaženje praćenja specifičnog za Chrome, sama biblioteka često nije dovoljna. Za grebanje velikog obima, biblioteka je samo volan – da biste se zapravo kretali, potreban vam je motor. Profesionalne usluge poput Oxylabs pružaju infrastrukturu i tehnologiju za deblokiranje potrebnu za zaobilaženje CAPTCHA i upravljanje otiscima prstiju pregledača u velikom obimu. Ove usluge omogućavaju vašim Playwright ili Puppeteer skriptama da se povežu sa udaljenim pregledačem za deblokiranje koji upravlja složenošću prevazilaženja mera protiv botova za vas. Proxy podrška, integracija i konfiguracija U automatizaciji veba, proxy-ji omogućavaju programerima da simuliraju zahteve iz više geografskih lokacija, omogućavajući lokalizovano testiranje performansi. Ovo je ključno za proveru da li server može da izdrži maksimalno opterećenje saobraćaja od distribuirane korisničke baze bez greške. Za veb grebanje, ovi isti proxy-ji su neophodni za izbegavanje blokova zasnovanih na IP-u i ograničenja brzine. Dok i Playwright i Puppeteer podržavaju proxy integraciju, oni se razlikuju u svojoj konfiguraciji. Kada je reč o konfiguraciji, Playwright nudi fleksibilniji pristup – možete postaviti proxy globalno prilikom pokretanja pregledača, ili postaviti jedinstvene proxy-je za pojedinačne kontekste pregledača. Na taj način, vaša pojedinačna skripta će izgledati kao da dolazi od deset različitih zemalja istovremeno, sve to koristeći jednu instancu pregledača. Puppeteer-ova proxy podrška je rigidnija – proxy-ji se obično definišu kao argument komandne linije tokom početnog pokretanja pregledača. Ako trebate da promenite proxy-je ili ih rotirate usred sesije, često morate ponovo pokrenuti pregledač ili koristiti biblioteke trećih strana za upravljanje logikom. Dobra stvar je što je većina premium provajdera proxy-ja dizajnirana da se neprimetno integriše sa oba okvira. Ove usluge obavljaju težak posao obezbeđujući jedinstvenu ulaznu tačku (gateway) koja automatski upravlja rotacijom IP-a i upravljanjem bazenom sa svoje strane. Na primer, provajder poput Oxylabs-a vam omogućava da unesete svoje akreditive direktno u konfiguraciju pokretanja. Umesto pisanja složenog koda za rotaciju stotina IP adresa, jednostavno se povezujete sa njihovim endpointom, a njihov backend automatski dodeljuje novu IP adresu za svaku novu sesiju ili zahtev. Ako ste spremni da podesite svoju vezu, većina provajdera nudi specifičnu dokumentaciju za obe ove biblioteke. Na primer:</