Браузерная автоматизация с Puppeteer

Последнее изменение:


Puppeteer это библиотека Node.js, которая позволяет автоматизировать процессы в Chromium браузере при помощи API высокого уровня, через Chrome DevTools Protocol. Например, вы можете создать веб-краулеры, которые будут искать и собирать данные, используя Mimic браузер с подмененными отпечатками.

Определение порта Indigo

В Indigo нужно предопределить порт для использования автоматизации с Puppeteer.

  1. Перейдите в папку C:\Users\%username%\.indigobrowser и откройте файл app.properties в любом текстовом редакторе.
  2. Добавьте в файл следующую строку: multiloginapp.port=[PORT_NUMBER].

    Номер порта должен находиться в диапазоне от 10000 до 49151.


  3. Сохраните файл app.properties.

    В дальнейшем вы сможете обращаться к Indigo по данному порту.

    Как начать

    Шаг 1

    Удостоверьтесь в том, что у вас установлен Node.js и пакетный менеджер npm. Вы можете скачать Node.js и npm с официального сайта Node.js (последние версии Node.js имеют npm в наличии). Как альтернатива, вы можете использовать yarn для менеджмента пакетов Node.js.

    Вы можете проверить версию ваших Node.js и npm, вызвав следующую команду в терминале:

    nodejs -v || node -v && npm -v
    Шаг 2

    Создайте новый npm проект в текущей директории.

    npm init -y
    

    Эта команда создаст конфигурационный файл package.json, а параметр -y позволит пропустить вопросы связанные с настройкой проекта и использовать дефолтные значения.

    Шаг 3

    Установите Puppeteer-core в директории проекта:

    npm install [email protected] --save


    Для каждой версии Chromium имеется своя версия Puppeteer-core. Вы можете следить за обновлениями браузерного движка Mimic в нашем канале. Совместимость версий Puppeteer-core и Chromium можно проверить в Puppeteer документации.

    Шаг 4

    Создайте .js файл с вашим кодом автоматизации. Пожалуйста, используйте следующий код в качестве примера.

    const puppeteer = require('puppeteer');
    const http = require('http');
    async function startProfile(){
    //Replace profileId value with existing browser profile ID.
    let profileId = 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx';
    let mlaPort = 35000;
    /*Send GET request to start the browser profile by profileId.
    Returns web socket as response which should be passed to puppeteer.connect*/
    http.get(`http://127.0.0.1:${mlaPort}/api/v1/profile/start?automation=true&puppeteer=true&profileId=${profileId}`, (resp) => {
    let data = '';
    let ws = '';
    //Receive response data by chunks
    resp.on('data', (chunk) => {
    data += chunk;
    });
    /*The whole response data has been received. Handling JSON Parse errors,
    verifying if ws is an object and contains the 'value' parameter.*/
    resp.on('end', () => {
    let ws;
    try {
    ws = JSON.parse(data);
    } catch(err) {
    console.log(err);
    }
    if (typeof ws === 'object' && ws.hasOwnProperty('value')) {
    console.log(`Browser websocket endpoint: ${ws.value}`);
    run(ws.value);
    }
    });
    }).on("error", (err) => {
    console.log(err.message);
    });
    }
    async function run(ws) {
    try{
    //Connecting Puppeteer with Mimic instance and performing simple automation.
    const browser = await puppeteer.connect({browserWSEndpoint: ws, defaultViewport:null});
    const page = await browser.newPage();
    await page.goto('https://multilogin.com');
    await page.screenshot({ path: `/home/${process.env.USER}/Desktop/multiloginScreenshot.png` });
    await browser.close();
    } catch(err){
    console.log(err.message);
    }
    }
    startProfile();
    Шаг 5

    Запустите .js файл через терминал для запуска вашего скрипта автоматизации.

    nodejs example.js

    Эта статья помогла вам?