Nieskończone feedy, przyciski „Wczytaj więcej” i strony budowane przez JavaScript zwracają zwykłemu żądaniu pustą skorupę. Gologin Cloud Browser ładuje je tak, jak robi to przeglądarka człowieka, więc Twój skrypt Playwright lub Puppeteer zbiera wszystko, co się pojawi.
Start za darmo, bez karty. Adresy rezydencyjne w cenie.
Zwykłe żądanie czyta HTML, który wysyła serwer. Dynamiczne strony wysyłają dane później, przez JavaScript, przewijanie i kliknięcia. Oto co zwraca każde podejście.
| Co dostajesz | Zwykłe żądanie HTTP | Headless Chrome | |
|---|---|---|---|
| Treść budowana przez JavaScript | Tak | Nie | Tak |
| Nieskończone przewijanie i „Wczytaj więcej” | Tak | Nie | Tak |
| Treść, która ładuje się po kilku sekundach | Tak | Nie | Tak |
| Rezydencyjne IP w cenie | Tak | Nie | Nie |
| Ta sama sesja przy następnym uruchomieniu | Tak | Nie | Nie |
| Serwery do utrzymania | Brak | Brak | Twoje |
Potrzebujesz tylko wyrenderowanej strony, a nie sesji? Web Unlocker zwraca ją w jednym żądaniu i nalicza opłatę tylko za sukces.
Połącz skrypt z Gologin Cloud Browser jedną linią, poczekaj na treść, a potem przewijaj, aż nic nowego się nie pojawi. Poniższy kod zebrał wszystkie 100 cytatów z testowej strony z nieskończonym przewijaniem.
Zarejestruj się przez Google i skopiuj klucz z panelu. Za darmo, bez karty.
Jedno kliknięcie w panelu albo jedno wywołanie API. Profil zachowuje urządzenie, IP i logowanie.
Zainstaluj bibliotekę i uruchom poniższy skrypt ze swoim tokenem i ID profilu. Skrypt przewija, dopóki ładują się nowe cytaty, a potem zbiera każdy z nich razem z autorem. Więcej w przewodniku dla początkujących.
npm install playwright-coreGOLOGIN_TOKEN=your_token GOLOGIN_PROFILE_ID=your_profile_id node scrape.mjswss://cloudbrowser.gologin.com/connect?token=…&profile=…import { chromium } from "playwright-core";
const token = process.env.GOLOGIN_TOKEN;
const profileId = process.env.GOLOGIN_PROFILE_ID;
const endpoint = `wss://cloudbrowser.gologin.com/connect?token=${token}&profile=${profileId}`;
const browser = await chromium.connectOverCDP(endpoint);
const page = await browser.contexts()[0].newPage();
await page.goto("http://quotes.toscrape.com/scroll");
await page.waitForSelector(".quote");
for (let i = 0; i < 30; i++) {
const before = await page.locator(".quote").count();
await page.evaluate(() => window.scrollTo(0, document.body.scrollHeight));
try {
await page.waitForFunction(
(n) => document.querySelectorAll(".quote").length > n,
before,
{ timeout: 3000 }
);
} catch {
break;
}
}
const quotes = await page.$$eval(".quote", (els) =>
els.map((el) => ({
text: el.querySelector(".text")?.textContent,
author: el.querySelector(".author")?.textContent,
}))
);
console.log(quotes.length, quotes[0]);
await page.close();
await browser.close();npm install puppeteer-coreGOLOGIN_TOKEN=your_token GOLOGIN_PROFILE_ID=your_profile_id node scrape.mjswss://cloudbrowser.gologin.com/connect?token=…&profile=…import puppeteer from "puppeteer-core";
const token = process.env.GOLOGIN_TOKEN;
const profileId = process.env.GOLOGIN_PROFILE_ID;
const endpoint = `wss://cloudbrowser.gologin.com/connect?token=${token}&profile=${profileId}`;
const browser = await puppeteer.connect({ browserWSEndpoint: endpoint });
const page = await browser.newPage();
await page.goto("http://quotes.toscrape.com/scroll");
await page.waitForSelector(".quote");
for (let i = 0; i < 30; i++) {
const before = await page.$$eval(".quote", (els) => els.length);
await page.evaluate(() => window.scrollTo(0, document.body.scrollHeight));
try {
await page.waitForFunction(
(n) => document.querySelectorAll(".quote").length > n,
{ timeout: 3000 },
before
);
} catch {
break;
}
}
const quotes = await page.$$eval(".quote", (els) =>
els.map((el) => ({
text: el.querySelector(".text")?.textContent,
author: el.querySelector(".author")?.textContent,
}))
);
console.log(quotes.length, quotes[0]);
await page.close();
await browser.disconnect();pip install playwrightGOLOGIN_TOKEN=your_token GOLOGIN_PROFILE_ID=your_profile_id python scrape.pywss://cloudbrowser.gologin.com/connect?token=…&profile=…import os
from playwright.sync_api import sync_playwright, TimeoutError as PlaywrightTimeoutError
token = os.environ["GOLOGIN_TOKEN"]
profile_id = os.environ["GOLOGIN_PROFILE_ID"]
endpoint = f"wss://cloudbrowser.gologin.com/connect?token={token}&profile={profile_id}"
with sync_playwright() as p:
browser = p.chromium.connect_over_cdp(endpoint)
page = browser.contexts[0].new_page()
page.goto("http://quotes.toscrape.com/scroll")
page.wait_for_selector(".quote")
for _ in range(30):
before = page.locator(".quote").count()
page.evaluate("window.scrollTo(0, document.body.scrollHeight)")
try:
page.wait_for_function(
"n => document.querySelectorAll('.quote').length > n",
arg=before,
timeout=3000,
)
except PlaywrightTimeoutError:
break
quotes = page.eval_on_selector_all(
".quote",
"els => els.map(el => ({text: el.querySelector('.text')?.textContent, author: el.querySelector('.author')?.textContent}))",
)
print(len(quotes), quotes[0])
page.close()
browser.close()Każdy plan uruchamia tę samą przeglądarkę, z adresami rezydencyjnymi w cenie. Plany różnią się liczbą godzin przeglądarki i sesji równoległych.
$0
Bez karty
$4.50/mies.
Dla programistów solo
$8/mies.
Dla rosnących zespołów
$14/mies.
Do krytycznych operacji
Potrzebujesz więcej naraz? Dodaj sesje równoległe do dowolnego planu za $2 miesięcznie każda, tyle, ile potrzebujesz. Ruch proxy ponad limit kosztuje $1/GB.
Od 4 sesji równoległych, z dedykowanym opiekunem konta, SLA premium i dopasowanym wdrożeniem.
Jedno konto, jedna sieć proxy, jeden ekosystem. Wybierz produkt, którego wymaga zadanie.
To zbieranie danych ze stron, które budują treść w przeglądarce: feedów, wyników wyszukiwania, cen czy opinii, które pojawiają się po załadowaniu strony, przy przewijaniu lub po kliknięciu. Potrzebujesz prawdziwej przeglądarki, żeby uruchomić stronę, zanim ją odczytasz.
Serwer wysyła skorupę, a dane przychodzą później przez JavaScript. Zwykłe żądanie zatrzymuje się na skorupie, więc danych do sparsowania po prostu nie ma. Załaduj stronę w przeglądarce i poczekaj na potrzebny element, tak jak robią to powyższe skrypty.
Użyj Web Unlocker, gdy potrzebujesz wyrenderowanej strony z URL: jedno żądanie, opłata tylko za sukces. Użyj Cloud Browser, gdy zadanie wymaga sesji: przewijania feedu, klikania przez kolejne strony, pozostania zalogowanym między uruchomieniami.
Przewiń na dół, poczekaj na nowe elementy i powtarzaj, aż ich liczba przestanie rosnąć. Powyższe skrypty robią dokładnie to i same się zatrzymują, gdy nic nowego się nie ładuje.
Tak. Zaloguj się raz w profilu, a sesja zostaje z nim: połącz się później i nadal jesteś zalogowany. Potrzebujesz jednego logowania w kilku przeglądarkach? Zobacz Przeglądarkę do scrapingu. Zbieraj tylko dane, do których masz prawo dostępu.
Tak. Python Playwright łączy się z tym samym adresem przez connect_over_cdp, a zakładka Python powyżej zawiera pełny skrypt. Zainstaluj go przez pip install playwright; nie trzeba pobierać lokalnej przeglądarki, bo przeglądarka działa w chmurze.
Podłącz skrypt Playwright lub Puppeteer jedną linią i zbieraj to, co widzi prawdziwa przeglądarka.
Start za darmo, bez karty. Adresy rezydencyjne w cenie.