普通请求读取的是服务器发送的 HTML。动态页面的数据要稍后才通过 JavaScript、滚动和点击送达。下面是每种方式能拿到的内容。
| 能拿到什么 | 普通 HTTP 请求 | 无头 Chrome | |
|---|---|---|---|
| 由 JavaScript 生成的内容 | 是 | 否 | 是 |
| 无限滚动和“加载更多” | 是 | 否 | 是 |
| 几秒后才加载的内容 | 是 | 否 | 是 |
| 包含住宅 IP | 是 | 否 | 否 |
| 下次运行使用同一会话 | 是 | 否 | 否 |
| 需要运行的服务器 | 无 | 无 | 需自备 |
只需要渲染后的页面、不需要会话?Web Unlocker 一次请求即可返回,并且仅在成功时计费。
一行代码把脚本连接到 Gologin Cloud Browser,等待内容出现,然后一直滚动到不再出现新内容为止。下面的代码从一个无限滚动的测试页面采集到了全部 100 条名言。
使用 Google 注册,然后从控制面板复制您的密钥。免费,无需信用卡。
在控制面板中点击一下,或调用一次 API。配置文件会保存设备、IP 和登录状态。
安装库,然后用您的令牌和配置文件 ID 运行下面的脚本。它会一直滚动,直到不再加载新的名言,然后连同作者一起采集每一条。更多内容请参阅入门指南。
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/月
适合关键业务
需要同时运行更多?任何套餐都可以加购并行会话,每个每月 $2,按需添加。超出额度的代理流量为 $1/GB。
4 个并行会话起,配备专属客户经理、高级 SLA 和定制化上手指导。
一个账户,一个代理网络,一套生态。按任务需要选择产品。
从在浏览器中生成内容的页面上采集数据:信息流、搜索结果、价格或评论,它们在页面加载之后、滚动时或点击后才出现。您需要先用真实浏览器运行页面,才能读取这些内容。
服务器先发送一个空壳,数据稍后才通过 JavaScript 送达。普通请求停在空壳这一步,所以根本没有数据可以解析。请在浏览器中加载页面,并等待您需要的元素出现,就像上面的脚本那样。
当您需要某个 URL 渲染后的页面时,请使用 Web Unlocker:一次请求,仅在成功时计费。当任务需要会话时,请使用 Cloud Browser:滚动信息流、逐页点击、在两次运行之间保持登录。
滚动到底部,等待新条目出现,然后重复,直到数量不再增加。上面的脚本正是这样做的,在没有新内容加载时会自动停止。
能。在配置文件中登录一次,会话就会保存在其中:之后重新连接时您仍处于登录状态。需要在多个浏览器之间共用一个登录?请参阅数据采集浏览器。请只采集您有权访问的数据。
可以。Python Playwright 用 connect_over_cdp 连接到同一个地址,上面的 Python 标签页中有完整脚本。用 pip install playwright 安装即可;无需在本地下载浏览器,因为浏览器在云端运行。