Clicky

Puppeteer browser automation

Updated 2 weeks ago by Annes Silde

Related articles

Puppeteer is a library for Node.js that provides an opportunity to automate processes with a Chromium-based browser through high-level API over the Chrome DevTools Protocol. For example, you can create web crawlers that search and collect data by using the Mimic browser with masked fingerprints.

Multilogin port allocation

In Multilogin, you need to predefine the application port in order to utilize Puppeteer automation.

  1. Go to the C:\Users\%username%\.multiloginapp.com directory and open the app.properties file using any text editor
  2. Add the following string to the file: multiloginapp.port=[PORT_NUMBER]
The port number has to be in the range of 10000 to 49151.
  1. Save the app.properties file

Thereafter, you will be able to refer to the Multilogin application through this port.

For more detailed instructions on how to complete these steps on different operating systems, check this guide.

How to start

Step 1

Make sure that you have Node.js and npm package manager installed on your PC. Node.js and npm can be downloaded from the official Node.js website (the latest versions of Node.js include npm by default). Alternatively, you can use yarn for Node.js packages management.

You can check the version of your Node.js and npm by executing the following commands in the terminal:

nodejs -v || node -v && npm -v

Step 2

Create a new npm project in the current directory:

npm init -y
This command will create a package.json file and a -y parameter allows to skip the questionnaire and create a project with default settings.

Step 3

Install Puppeteer-core in the project directory:

npm install [email protected] --save
Certain Puppeteer-core versions are only compatible with certain Chromium versions. Currently, (starting from Multilogin version 6.1.2), Mimic uses Chromium 99, which is compatible with Puppeteer-core version 13.4.1. You can check our Release notes for Mimic browser core updates. The information on the compatibility of Puppeteer-core and Chromium versions is available in Puppeteer documentation.
Previous version compatibility

Chromium 97 (starting from Multilogin version 6.1.1)

Puppeteer-core 13.0.1

Chromium 93 (starting from Multilogin version 5.18.0)

Puppeteer-core 10.2.0

Step 4

Create a .js file with your automation code. Please use the following code example for reference:

const puppeteer = require('puppeteer-core');
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();

Step 5

Launch the .js file through the terminal in order to start your automation script:

nodejs example.js

Videos on the topic


Check out our latest news, research and tutorials


Was this article helpful?