通常のリクエストは、サーバーが送るHTMLを読むだけです。動的なページは、JavaScript、スクロール、クリックを通じて後からデータを送ります。各方式で取得できるものは次のとおりです。
| 取得できるもの | 通常のHTTPリクエスト | ヘッドレスChrome | |
|---|---|---|---|
| JavaScriptで構築されるコンテンツ | あり | なし | あり |
| 無限スクロールと「もっと見る」 | あり | なし | あり |
| 数秒後に読み込まれるコンテンツ | あり | なし | あり |
| レジデンシャルIP込み | あり | なし | なし |
| 次の実行でも同じセッション | あり | なし | なし |
| 運用するサーバー | 不要 | 不要 | 自前 |
セッションではなく、レンダリング済みのページだけが必要ですか?Web Unlockerなら1回のリクエストで返し、課金は成功時のみです。
1行でスクリプトをGologin Cloud Browserに接続し、コンテンツを待ってから、新しいものが出なくなるまでスクロールします。以下のコードは、無限スクロールのテストページから100件の名言をすべて収集しました。
Googleでサインアップし、ダッシュボードからキーをコピーします。無料、カード不要です。
ダッシュボードでワンクリック、またはAPI呼び出し1回で作成できます。プロファイルにはデバイス、IP、ログイン情報が保存されます。
ライブラリをインストールし、トークンとプロファイルIDを指定して下のスクリプトを実行します。新しい名言が読み込まれなくなるまでスクロールし、1件ずつ著者名と一緒に収集します。詳しくはスタートガイドをご覧ください。
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()どのプランでも同じブラウザが動き、レジデンシャルIPが含まれます。プランの違いは、ブラウザ時間と並列セッション数です。
$0
カード不要
$4.50/月
個人開発者向け
$8/月
成長中のチーム向け
$14/月
重要な業務向け
同時にもっと必要ですか?並列セッションは、どのプランにも1つにつき月$2で必要なだけ追加できます。付与量を超えたプロキシトラフィックは$1/GBです。
4並列セッションから。専任のアカウントマネージャー、プレミアムSLA、個別のオンボーディング付き。
1つのアカウント、1つのプロキシネットワーク、1つのエコシステム。用途に合った製品をお選びください。
ブラウザ内でコンテンツを構築するページからデータを収集することです。ページの読み込み後、スクロール時、クリック後に表示されるフィード、検索結果、価格、レビューなどが対象です。読み取る前にページを実行する必要があるため、本物のブラウザが必要です。
サーバーは枠だけを送り、データは後からJavaScriptで届きます。通常のリクエストは枠の時点で止まるため、解析すべきデータがそもそも存在しません。上のスクリプトのように、ブラウザでページを読み込み、必要な要素を待ってください。
URLからレンダリング済みのページが必要なら、Web Unlockerを使います。1回のリクエストで、課金は成功時のみです。フィードのスクロール、ページのクリック移動、実行間のログイン維持など、セッションが必要な作業にはCloud Browserを使います。
最下部までスクロールし、新しい項目が表示されるのを待ち、件数が増えなくなるまで繰り返します。上のスクリプトはまさにそのとおりに動き、新しいものが読み込まれなくなると自動で止まります。
はい。プロファイルで一度ログインすれば、セッションはそのプロファイルに残ります。後で再接続してもログインしたままです。複数のブラウザで1つのログインを使いたい場合は、スクレイピングブラウザをご覧ください。収集するのは、アクセスが許可されているデータだけにしてください。
はい。Python版Playwrightはconnect_over_cdpで同じアドレスに接続し、上のPythonタブに完全なスクリプトがあります。インストールはpip install playwrightで行います。ブラウザはクラウドで動くため、ローカルにブラウザをダウンロードする必要はありません。