Перейти к основному содержимому

Заполнение и отправка форм с помощью Puppeteer

В этом примере показано, как использовать PuppeteerCrawler для автоматического заполнения и отправки поисковой формы для поиска репозиториев на GitHub с помощью безголового Chrome / Puppeteer. Сначала краулер заполняет поисковый запрос, владельца репозитория, дату начала и язык программирования, затем отправляет форму и выводит результаты. В конце результаты сохраняются либо на платформе Apify в стандартном dataset, либо локально в виде JSON-файлов в директории ./storage/datasets/default.

подсказка

Для запуска этого примера на платформе Apify выберите образ apify/actor-node-puppeteer-chrome для вашего Dockerfile.

Run on
import { Dataset, launchPuppeteer } from 'crawlee';

// Запускаем веб-браузер.
const browser = await launchPuppeteer();

// Создаем и переходим на новую страницу
console.log('Открываем целевую страницу');
const page = await browser.newPage();
await page.goto('https://github.com/search/advanced');

// Заполняем поля формы и выбираем желаемые параметры поиска
console.log('Заполняем поисковую форму');
await page.type('#adv_code_search input.js-advanced-search-input', 'apify-js');
await page.type('#search_from', 'apify');
await page.type('#search_date', '>2015');
await page.select('select#search_language', 'JavaScript');

// Отправляем форму и ждем полной загрузки следующей страницы
console.log('Отправляем поисковую форму');
await Promise.all([
page.waitForNavigation({ waitUntil: 'networkidle2' }),
page.click('#adv_code_search button[type="submit"]'),
]);

// Получаем и выводим список результатов поиска
const results = await page.$$eval('[data-testid="results-list"] div.search-title > a', (nodes) =>
nodes.map((node) => ({
url: node.href,
name: node.innerText,
})),
);

console.log('Результаты:', results);

// Сохраняем данные в набор данных по умолчанию
await Dataset.pushData(results);

// Закрываем браузер
await browser.close();