实时会话
爬虫浏览器的实时视图功能允许您实时查看和控制浏览器会话。具体来说,实时视图功能包括查看、点击、输入和滚动任何活动浏览器会话中的内容。因此,您可以轻松监控自动化流程、调试自动化脚本以及手动干预浏览器会话。
在 Scrapeless 中,您可以在两个地方查看或控制浏览器会话:playground 和会话管理界面。
如何使用
创建 Scrapeless 浏览器会话
首先,您需要创建一个会话。有两种方法可以做到这一点:
通过 Playground 创建会话
通过 API 创建会话
您也可以使用我们的 API 创建会话。请参考 API 文档:Scraping Browser API 文档。我们的会话功能将帮助您管理此会话,包括实时查看功能。
const puppeteer =require('puppeteer-core');
const token = 'API Key'
// custom fingerprint
const fingerprint = {
platform: 'Windows',
}
const query = new URLSearchParams({
session_ttl: 180,
session_name: 'test_scraping', // session name
proxy_country: 'ANY',
token: token,
fingerprint: encodeURIComponent(JSON.stringify(fingerprint)),
});
const connectionURL = `wss://browser.scrapeless.com/browser?${query.toString()}`;
(async () => {
const browser = await puppeteer.connect({browserWSEndpoint: connectionURL});
const page = await browser.newPage();
await page.goto('https://www.scrapeless.com');
await new Promise(res => setTimeout(res, 3000));
await page.goto('https://www.google.com');
await new Promise(res => setTimeout(res, 3000));
await page.goto('https://www.youtube.com');
await new Promise(res => setTimeout(res, 3000));
await browser.close();
})();
查看实时会话
在 Scrapeless 会话管理界面中,您可以轻松查看实时会话。也有两种查看方式:
实时查看 Playground 会话
在 Playground 中创建会话后,您可以在右侧看到实时运行的浏览器。
实时查看 API 会话
通过 API 创建会话后,您可以在会话页面上看到正在运行的会话列表。点击操作详情可以预览浏览器的实时操作。在这里您可以选择在现场查看实时会话或复制会话URL来查看实时会话。我们提供两个操作视频供您参考。
现场显示
通过网站获取实时 URL
您可以从正在运行的会话列表中复制实时 URL 并将其粘贴到浏览器中直接访问。
通过 API 获取实时 URL
您可以通过调用 API 获取实时 URL。在下面的代码示例中,我们首先使用运行中的会话 API获取所有当前正在运行的会话,然后使用实时 URL API检索特定会话的实时 URL:
const API_CONFIG = {
host: 'https://api.scrapeless.com',
headers: {
'x-api-token': 'API Key',
'Content-Type': 'application/json'
}
};
const requestOptions = {
method: 'GET',
headers: new Headers(API_CONFIG.headers)
};
async function fetchBrowserSessions() {
try {
// Fetch running browser sessions
const sessionResponse = await fetch(`${API_CONFIG.host}/browser/running`, requestOptions);
if (!sessionResponse.ok) {
throw new Error(`failed to fetch sessions: ${sessionResponse.status} ${sessionResponse.statusText}`);
}
const sessionResult = await sessionResponse.json();
// Process sessions data
const sessions = sessionResult.data;
if (!sessions || !Array.isArray(sessions) || sessions.length === 0) {
console.log("no active browser sessions found");
return;
}
// Get first session task ID
const taskId = sessions[0]?.taskId;
if (!taskId) {
console.log("task id not found in the session data");
return;
}
// Fetch live URL for the task
await fetchLiveUrl(taskId);
} catch (error) {
console.error("error fetching browser sessions:", error.message);
}
}
async function fetchLiveUrl(taskId) {
try {
const liveResponse = await fetch(`${API_CONFIG.host}/browser/${taskId}/live`, requestOptions);
if (!liveResponse.ok) {
throw new Error(`failed to fetch live url: ${liveResponse.status} ${liveResponse.statusText}`);
}
const liveResult = await liveResponse.json();
if (liveResult && liveResult.data) {
console.log(`taskId: ${taskId}`);
console.log(`liveUrl: ${liveResult.data}`);
} else {
console.log("no live url data available for this task");
}
} catch (error) {
console.error(`error fetching live url for task ${taskId}:`, error.message);
}
}
fetchBrowserSessions().then(r => { });
通过 CDP 获取实时 URL
要在代码运行时获取实时 URL,请调用 cdp 命令Agent.liveURL:
const puppeteer = require('puppeteer-core');
const connectionURL = 'wss://browser.scrapeless.com/browser?token=APIKey&session_ttl=180&proxy_country=ANY';
(async () => {
const browser = await puppeteer.connect({browserWSEndpoint: connectionURL});
const page = await browser.newPage();
await page.goto('https://www.scrapeless.com');
const client = await page.createCDPSession();
const result = await client.send("Agent.liveURL");
console.log(result);
await browser.close();
})();