Midscene.js с браузером для скрапинга Bright Data

Объедините Midscene.js с Browser API от Bright Data, чтобы автоматизировать веб-скраппинг с помощью естественного языка и мощных прокси-функций.
7 мин. чтения
Scraping Browser + Midscene

Веб-скрепинг играет важную роль в масштабном сборе данных, особенно когда необходимо быстро принимать обоснованные решения.

В этом уроке вы узнаете:

  • Что такое Midscene.js и как он работает,
  • Ограничения при использовании Midscene.js,
  • Как Bright Data помогает преодолеть эти трудности
  • Как интегрировать Midscene.js с Bright Data для эффективного веб-скреппинга

Давайте погрузимся!

Что такое Midscene.js?

Midscene.js – это инструмент с открытым исходным кодом, позволяющий автоматизировать взаимодействие с браузером с помощью простого английского языка. Вместо того чтобы писать сложные скрипты, вы можете просто набирать команды вроде “Нажмите кнопку входа” или “Введите в поле электронной почты”. Затем Midscene преобразует эти команды в шаги автоматизации с помощью агентов искусственного интеллекта.

Он также поддерживает современные инструменты автоматизации браузера, такие как Puppeteer и Playwright, что делает его особенно полезным для таких задач, как тестирование, автоматизация пользовательского интерфейса и создание динамических веб-сайтов.

В деталях, основные функции, которые он предлагает, таковы:

  • Управление на естественном языке: Автоматизируйте задачи, используя понятные подсказки на английском языке, а не код.
  • Интеграция искусственного интеллекта с сервером MCP: Подключение к моделям искусственного интеллекта через сервер MCP для создания сценариев автоматизации.
  • Встроенная поддержка Puppeteer и Playwright: Выступает в качестве высокоуровневого слоя над популярными фреймворками, облегчая управление и расширение рабочих процессов.
  • Кроссплатформенная автоматизация: Поддерживает как веб (через Puppeteer/Playwright), так и Android (через JavaScript SDK).
  • Опыт работы без кода: Предлагает такие инструменты, как расширение Midscene Chrome Extension, позволяющее создавать автоматизированные системы без написания строк кода.
  • Простой дизайн API: Предоставляет чистый, хорошо документированный API для взаимодействия с элементами страницы и эффективного извлечения контента.

Ограничения использования Midscene для автоматизации веб-браузера

Midscene использует модели искусственного интеллекта, такие как GPT-4o или Qwen, для автоматизации браузеров с помощью команд на естественном языке. Она работает с такими инструментами, как Puppeteer и Playwright, но имеет ключевые ограничения.

Точность Midscene зависит от четкости ваших инструкций и структуры страницы. Расплывчатые подсказки вроде “нажмите кнопку” могут не сработать, если есть несколько похожих кнопок. ИИ опирается на скриншоты и визуальные макеты, поэтому небольшие структурные изменения или отсутствие надписей могут привести к ошибкам или неправильным нажатиям. Подсказки, сработавшие на одной веб-странице, могут не сработать на другой, имеющей схожий внешний вид.

Чтобы свести к минимуму количество ошибок, пишите четкие, конкретные инструкции, соответствующие структуре страницы. Всегда тестируйте подсказки с помощью расширения Midscene Chrome Extension, прежде чем интегрировать их в сценарии автоматизации.

Еще одно ключевое ограничение – высокое потребление ресурсов. Каждый шаг автоматизации с помощью Midscene отправляет снимок экрана и запрос модели искусственного интеллекта, используя множество токенов – особенно на динамических страницах или страницах с большим объемом данных. Это может привести к ограничению скорости работы AI API и повышению стоимости использования при увеличении количества автоматизированных шагов.

Midscene также не может взаимодействовать с защищенными элементами браузера, такими как CAPTCHA, кросс-оригинальные iframes или контент за стенами аутентификации. Как следствие, скраппинг защищенного или закрытого контента невозможен. Midscene наиболее эффективен на статичных или умеренно динамичных сайтах с доступным, структурированным контентом.

Почему яркие данные – более эффективное решение

Bright Data – это мощная платформа для сбора данных, которая поможет вам создавать, запускать и масштабировать операции по сбору данных с веб-сайтов. Она предлагает мощную прокси-инфраструктуру, инструменты автоматизации и наборы данных для предприятий и разработчиков, позволяя вам получать доступ, извлекать и взаимодействовать с любыми публичными веб-сайтами.

  • Работа с динамическими и JavaScript-тяжелыми веб-сайтами Bright Data предлагает различные инструменты, такие как SERP API, Crawl API, Browser API и Unlocker API, которые позволяют вам получать доступ, извлекать данные и взаимодействовать со сложными веб-сайтами, которые загружают контент динамически. Эти инструменты позволяют извлекать данные с любой платформы, что делает их идеальными для электронной коммерции, путешествий и платформ недвижимости.
  • Эффективная инфраструктура прокси Bright Data предлагает мощную и гибкую инфраструктуру прокси через свои четыре основные сети: Жилая, ЦОД, ISP и Мобильная. Эти сети обеспечивают доступ к миллионам IP-адресов по всему миру, позволяя пользователям надежно собирать веб-данные и минимизировать блокировки.
  • Поддержка мультимедийного контента Bright Data позволяет извлекать различные типы контента, включая видео, изображения, аудио и текст, из общедоступных источников. Его инфраструктура разработана для работы с крупномасштабными коллекциями мультимедиа и поддержки передовых сценариев использования, таких как обучение моделей компьютерного зрения, создание инструментов распознавания речи и обеспечение работы систем обработки естественного языка.
  • Предоставление готовых наборов данных Bright Data предоставляет готовые наборы данных, полностью структурированные, высококачественные и готовые к использованию. Эти наборы данных охватывают различные сферы, включая электронную коммерцию, размещение вакансий, недвижимость и социальные сети, что делает их подходящими для различных отраслей и случаев использования.

Как интегрировать Midscene.js с Bright Data

В этом учебном разделе вы узнаете, как соскребать данные с веб-сайтов с помощью Midscene и Browser API Bright Data, а также как объединить оба инструмента для улучшения функциональности веб-скреппинга.

Чтобы продемонстрировать это, мы возьмем статичную веб-страницу, на которой отображается список контактных карточек сотрудников. Мы начнем с использования Midscene и Bright Data по отдельности, а затем интегрируем их с помощью Puppeteer, чтобы показать, как они могут работать вместе.

Пререквизиты

Чтобы следовать этому руководству, убедитесь, что у вас есть следующее:

  • Учетная запись Bright Data.
  • редактор кода, например, Visual Studio Code, Cursor и т.д.
  • Ключ API OpenAI, поддерживающий модель GPT-4o.
  • Базовые знания языка программирования JavaScript.

Если у вас еще нет учетной записи Bright Data, не волнуйтесь. Мы расскажем вам о том, как их создать, в следующих шагах.

Шаг №1: Настройка проекта

Откройте терминал и выполните следующую команду, чтобы создать новую папку для скриптов автоматизации:

mkdir automation-scripts
cd automation-scripts

Добавьте файл package.json во вновь созданную папку с помощью следующего фрагмента кода:

npm init -y

Измените значение типа package.json с commonjs на module.

{
	"type": "module"
}

Далее установите необходимые пакеты, чтобы включить выполнение TypeScript и получить доступ к функциональности Midscene.js:

npm install tsx @midscene/web --save

Затем установите пакеты Puppeteer и Dotenv.

npm install puppeteer dotenv

Puppeteer – это библиотека Node.js, которая предоставляет высокоуровневый API для управления браузерами Chrome или Chromium. Dotenv позволяет безопасно хранить ключи API.

Теперь все необходимые пакеты установлены. Мы можем приступить к написанию сценариев автоматизации.

Шаг № 2: Автоматизация веб-скрапинга с помощью Midscene.js

Прежде чем мы продолжим, создайте файл .env в папке automation-scripts и скопируйте в него ключ API OpenAI в качестве переменной окружения.

OPENAI_API_KEY=<your_openai_key>

Midscene использует модель OpenAI GPT-4o для выполнения задач автоматизации по командам пользователя.

Затем создайте файл в этой папке.

cd automation-scripts
touch midscene.ts

Импортируйте Puppeteer, Midscene Puppeteer Agent и конфигурацию dotenv в этот файл:

import puppeteer from "puppeteer";
import { PuppeteerAgent } from "@midscene/web/puppeteer";
import "dotenv/config";

Добавьте следующий фрагмент кода в файл midscene.ts:

const sleep = (ms: number) => new Promise((r) => setTimeout(r, ms));
Promise.resolve(
	(async () => {
		//👇🏻 initialize puppeteer
		const browser = await puppeteer.launch({
			headless: false,
		});

		//👇🏻 set the page config
		const page = await browser.newPage();
		await page.setViewport({
			width: 1280,
			height: 800,
			deviceScaleFactor: 1,
		});

		/*
    ----------
    👉🏻 Write automation scripts here 👈🏼 
    -----------

    */
	})()
);

Этот фрагмент кода инициализирует Puppeteer внутри асинхронного Immediately Invoked Function Expression (IIFE). Такая структура позволяет использовать await на верхнем уровне, не оборачивая логику в несколько вызовов функций.

Затем добавьте следующие фрагменты кода в IIFE:

//👇🏻 Navigates to the web page
await page.goto(
	"<https://lf3-static.bytednsdoc.com/obj/eden-cn/nupipfups/Midscene/contacts3.html>"
);

// 👇🏻 init Midscene agent
const agent = new PuppeteerAgent(page as any);

//👇🏻 gives the AI model a query
const items = await agent.aiQuery(
	"get all the contacts details from the screen"
);

//👇🏻 Waits for 5secs
await sleep(5000);

// 👀 log the results
console.log("search result", items);

Приведенный выше фрагмент кода переходит по адресу веб-страницы, инициализирует агента Puppeteer, извлекает все контактные данные с веб-страницы и регистрирует результат.

Шаг № 3: Автоматизация веб-скрапинга с помощью Bright Data Browser API

Создайте файл brightdata.ts в папке automation-scripts.

cd automation-scripts
touch brightdata.ts

Перейдите на главную страницу Bright Data и создайте учетную запись.

Выберите Browser API на панели управления, затем введите имя и описание зоны, чтобы создать новый API браузера.

Добавление новой зоны Browser API на платформе Bright Data

Затем скопируйте учетные данные Puppeteer и сохраните их в файле brightdata.ts, как показано ниже:

const BROWSER_WS = "wss://brd-customer-******";

Измените файл brightdata.ts, как показано ниже:

import puppeteer from "puppeteer";

const URL =
	"<https://lf3-static.bytednsdoc.com/obj/eden-cn/nupipfups/Midscene/contacts3.html>";

const BROWSER_WS = "wss://brd-customer-******";

run(URL);

async function run(url: string) {
	try {
		/*
    ---------------------------
    👉🏻 Web automation workflow 👈🏼
    ---------------------------
    */
    
    //👇🏻 close the browser
    await browser.close();

	} catch (err) {
		console.error("Error fetching data");
	}
}

В этом фрагменте кода объявляется переменная для URL-адреса веб-страницы и учетной записи API браузера Bright Data, а затем объявляется функция, принимающая URL-адрес в качестве параметра.

Добавьте следующий фрагмент кода в местодержатель рабочего процесса веб-автоматизации:

//👇🏻 connect to Bright Data Browser API
console.log("Connecting to browser...");
const browser = await puppeteer.connect({
	browserWSEndpoint: BROWSER_WS,
});

console.log("Connected! Navigate to site...");
const page = await browser.newPage();

//👇🏻 Go to webpage
await page.goto(url, { waitUntil: "domcontentloaded", timeout: 60000 });
console.log("Navigated! Waiting for popup...");

Приведенный ниже фрагмент кода подключает Puppeteer к Bright Data Browser с помощью конечной точки API WebSocket. После установления соединения открывается новая страница браузера и осуществляется переход на URL, переданный в функцию run().

И наконец, получите данные на веб-странице с помощью селекторов CSS с помощью следующего фрагмента кода:

//👇🏻 Get contact details using CSS attribute
const contacts = await page.evaluate(() => {
	const cards = document.querySelectorAll("#contactsGrid .contact-card");
	return Array.from(cards).map((card) => {
		const nameEl = card.querySelector(".contact-name");
		const detailsEl = card.querySelectorAll(
			".contact-details .detail-item span:not(.detail-icon)"
		);
		const metaEl = card.querySelector(".contact-meta");
		if (!nameEl || !detailsEl.length || !metaEl) {
			return null; // Skip if any required element is missing
		}

		const contact = {
			name:
				(nameEl as HTMLElement)?.dataset.name ||
				(nameEl as HTMLElement)?.innerText.trim() ||
				null,
			jobTitle: (metaEl as HTMLElement)?.innerText.trim() || null,
			phone: (detailsEl[0] as HTMLElement)?.innerText.trim() || null,
			email: (detailsEl[1] as HTMLElement)?.innerText.trim() || null,
			company: (detailsEl[2] as HTMLElement)?.innerText.trim() || null,
			address: (detailsEl[3] as HTMLElement)?.innerText.trim() || null,
			lastContact: (detailsEl[4] as HTMLElement)?.innerText.trim() || null,
		};

		return contact;
	});
});

console.log("Contacts grid found! Extracting data...", contacts);

Приведенный выше фрагмент кода просматривает каждую карточку контакта на веб-странице и извлекает такие ключевые данные, как имя, должность, номер телефона, адрес электронной почты, компания, адрес и дата последнего контакта.

GIF, показывающий процесс извлечения ключевых деталей

Вот полный сценарий автоматизации:

import puppeteer from "puppeteer";

const URL =
	"<https://lf3-static.bytednsdoc.com/obj/eden-cn/nupipfups/Midscene/contacts3.html>";
const BROWSER_WS ="wss://brd-customer-*******";

run(URL);

async function run(url: string) {
	try {

		//👇🏻 connect to Bright data Browser API
		console.log("Connecting to browser...");
		const browser = await puppeteer.connect({
			browserWSEndpoint: BROWSER_WS,
		});

		console.log("Connected! Navigate to site...");
		const page = await browser.newPage();

		//👇🏻 Go to webpage
		await page.goto(url, { waitUntil: "domcontentloaded", timeout: 60000 });
		console.log("Navigated! Waiting for popup...");

		//👇🏻 Get contact details using CSS attribute
		const contacts = await page.evaluate(() => {
			const cards = document.querySelectorAll("#contactsGrid .contact-card");
			return Array.from(cards).map((card) => {
				const nameEl = card.querySelector(".contact-name");
				const detailsEl = card.querySelectorAll(
					".contact-details .detail-item span:not(.detail-icon)"
				);
				const metaEl = card.querySelector(".contact-meta");
				if (!nameEl || !detailsEl.length || !metaEl) {
					return null; // Skip if any required element is missing
				}

				const contact = {
					name: (nameEl as HTMLElement)?.dataset.name || (nameEl as HTMLElement)?.innerText.trim() || null,
					jobTitle: (metaEl as HTMLElement)?.innerText.trim() || null,
					phone: (detailsEl[0] as HTMLElement)?.innerText.trim() || null, 
					email: (detailsEl[1] as HTMLElement)?.innerText.trim() || null,
					company: (detailsEl[2] as HTMLElement)?.innerText.trim() || null,
					address: (detailsEl[3] as HTMLElement)?.innerText.trim() || null,
					lastContact: (detailsEl[4] as HTMLElement)?.innerText.trim() || null,
						
				};

				return contact;
			});
		});

		console.log("Contacts grid found! Extracting data...", contacts);

		//👇🏻 close the browser
		await browser.close();
	} catch (err) {
		console.error("Error fetching data");
	}
}

Шаг № 4: Сценарии автоматизации ИИ с помощью Midscene и Bright Data

Bright Data поддерживает веб-автоматизацию с помощью агентов искусственного интеллекта благодаря интеграции с Midscene. Поскольку оба инструмента поддерживают Puppeteer, их объединение позволяет писать простые рабочие процессы автоматизации на основе ИИ. Создайте файл combine.ts и скопируйте в него следующий фрагмент кода:

import { PuppeteerAgent } from "@midscene/web/puppeteer";
import puppeteer from "puppeteer";
import "dotenv/config";

const URL =
	"<https://lf3-static.bytednsdoc.com/obj/eden-cn/nupipfups/Midscene/contacts3.html>";
const BROWSER_WS = "wss://brd-customer-******";

const sleep = (ms: number) => new Promise((r) => setTimeout(r, ms));
Promise.resolve(
	(async () => {
		/*
    		---------------------------
    		👉🏻 Web automation workflow 👈🏼
   			 ---------------------------
   		 */

		//👇🏻 close the browser
		await browser.close();
	})()
);

Приведенный выше фрагмент кода создает асинхронный IIFE (Immediately Invoked Function Expression) и включает функцию sleep, которая позволяет добавлять задержки в сценарий автоматизации ИИ.

Затем добавьте следующий фрагмент кода в держатель рабочего процесса веб-автоматизации:

//👇🏻 connect to Bright Data Browser API
console.log("Connecting to browser...");
const browser = await puppeteer.connect({
	browserWSEndpoint: BROWSER_WS,
});

//👇🏻 declares page
console.log("Connected! Navigate to site...");
const page = await browser.newPage();

//👇🏻 Go to website
await page.goto(URL, { waitUntil: "domcontentloaded", timeout: 60000 });

// 👀 init Midscene agent
const agent = new PuppeteerAgent(page as any);

// 👇🏻 get contact details using AI agent
const items = await agent.aiQuery(
	"get all the contacts details from the screen"
);

//👇🏻 delays for 5secs
await sleep(5000);

//👇🏻 logs the result
console.log("search result", items);

Этот фрагмент кода инициализирует Puppeteer и его агента для перехода на веб-страницу, получения всех контактных данных и записи результатов в консоль. Это показывает, как можно интегрировать агент искусственного интеллекта Puppeteer с Bright Data Browser API, чтобы полагаться на понятные команды, которые предоставляет Midscene.

Шаг №5: Собираем все вместе

В предыдущем разделе вы узнали, как интегрировать Midscene с Bright Data Browser API. Полный сценарий автоматизации показан ниже:

import { PuppeteerAgent } from "@midscene/web/puppeteer";
import puppeteer from "puppeteer";
import "dotenv/config";

const URL =
	"<https://lf3-static.bytednsdoc.com/obj/eden-cn/nupipfups/Midscene/contacts3.html>";
const BROWSER_WS = "wss://brd-customer-*****";

const sleep = (ms: number) => new Promise((r) => setTimeout(r, ms));
Promise.resolve(
	(async () => {
		//👇🏻 connect to Bright Data Browser API
		console.log("Connecting to browser...");
		const browser = await puppeteer.connect({
			browserWSEndpoint: BROWSER_WS,
		});

		console.log("Connected! Navigate to site...");
		const page = await browser.newPage();

		//👇🏻 Go to Booking.com
		await page.goto(URL, { waitUntil: "domcontentloaded", timeout: 60000 });

	
		// 👀 init Midscene agent
		const agent = new PuppeteerAgent(page as any);

		const items = await agent.aiQuery(
			"get all the contacts details from the screen"
		);

		await sleep(5000);

		console.log("search result", items);

		await browser.close();
	})()
);

Запустите следующий фрагмент кода в терминале, чтобы выполнить скрипт:

npx tsx combine.ts

Приведенный выше фрагмент кода выполняет сценарий автоматизации и записывает данные о контакте в консоль.

 [
  {
    name: 'Alice Johnson',
    jobTitle: 'Senior Software Engineer',
    phone: '+1 (555) 123-4567',
    email: '[email protected]',
    company: 'TechCorp Innovation - Engineering',
    address: '123 Tech Street, San Francisco...',
    lastContact: 'Last contact: 2025-05-15'
  },
  {
    name: 'Bob Wilson',
    jobTitle: 'UI/UX Designer',
    phone: '+1 (555) 234-5678',
    email: '[email protected]',
    company: 'Creative Design Studio - Product',
    address: '456 Design Ave, New York, NY...',
    lastContact: 'Last contact: 2025-05-20'
  },
  {
    name: 'Carol Davis',
    jobTitle: 'Sales Director',
    phone: '+1 (555) 345-6789',
    email: '[email protected]',
    company: 'Sales Force Solutions - Sales',
    address: '789 Business Blvd, Chicago, IL...',
    lastContact: 'Last contact: 2025-06-01'
  },
  {
    name: 'David Brown',
    jobTitle: 'Marketing Manager',
    phone: '+1 (555) 456-7890',
    email: '[email protected]',
    company: 'Marketing Solutions Inc - Marketing',
    address: '321 Market St, Austin, TX...',
    lastContact: 'Last contact: 2025-05-25'
  },
  {
    name: 'Emma Taylor',
    jobTitle: 'HR Manager',
    phone: '+1 (555) 567-8901',
    email: '[email protected]',
    company: 'HR Expert Solutions - Human Resources',
    address: '654 Corporate Way, Seattle, WA...',
    lastContact: 'Last contact: 2025-05-30'
  }
]

Шаг № 6: Следующие шаги

Этот учебник показывает, что возможно при интеграции Midscene с API Bright Data Browser. На этой основе можно автоматизировать более сложные рабочие процессы.

Объединив оба инструмента, вы сможете выполнять эффективные и масштабируемые задачи автоматизации браузера, такие как:

  • Соскабливание структурированных данных с динамических или насыщенных JavaScript веб-сайтов
  • Автоматизация отправки форм для тестирования или сбора данных
  • Навигация по веб-сайтам и взаимодействие с элементами с помощью инструкций на естественном языке
  • Выполнение масштабных заданий по извлечению данных с управлением прокси-серверами и обработкой CAPTCHA

Заключение

До сих пор вы узнали, как автоматизировать процессы веб-скрапинга с помощью Midscene и Bright Data Browser API, а также как использовать оба инструмента для скрэпинга веб-сайтов с помощью агентов искусственного интеллекта.

Midscene в значительной степени зависит от моделей искусственного интеллекта для автоматизации браузера, а использование его вместе с Bright Data Scraping Browser означает сокращение количества строк кода при эффективных функциях веб-скрепинга. Browser API – это лишь один из примеров того, как инструменты и сервисы Bright Data могут расширить возможности автоматизации на основе искусственного интеллекта.

Подпишитесь сейчас, чтобы узнать обо всех продуктах.

Вас также может заинтересовать

Bright Data APIs with Agent.ai blog image
AI

Интеграция API Bright Data в Agent.ai для создания более умных агентов ИИ

Узнайте, как интегрировать API веб-данных Bright Data в Agent.ai для создания более умных агентов ИИ без кода, которые получают доступ к веб-контенту и обобщают его в режиме реального времени.
3 мин. чтения
Bright Data with Vercel AI SDK blog image
AI

Создание ИИ-помощника для изучения новостей с помощью Bright Data и Vercel ИИ SDK

Это руководство поможет вам создать помощника по исследованию новостей с помощью ИИ, который будет собирать глобальные новости, обходить платные стены, выявлять предвзятость и проводить интеллектуальный анализ, используя Bright Data и Vercel ИИ SDK.
3 мин. чтения
Semantic Kernel × Bright Data MCP
AI

Интеграция Web MCP компании Bright Data в семантическое ядро агента ИИ

Узнайте, как подключить агентов ИИ Semantic Kernel к Web MCP Bright Data, обеспечив доступ к веб-данным в режиме реального времени в рабочих процессах ИИ с помощью C#.
4 мин. чтения