Main Website
Web Scraping
Web Scraping
Updated on
March 25, 2024

Guide to Puppeteer Extra: Best Plugins For Scraping Ranked

In this article, we will discuss the powerful capabilities of Puppeteer Extra and its essential plugins for streamlined web scraping tasks. Further, we’ll explore 8 key plugins such as Stealth plugin, Recaptcha plugin, Adblocker plugin and others. Our focus will be on practical insights, providing code examples and concise explanations for each plugin.

What is Puppeteer Extra?

Puppeteer Extra serves as a powerful extension to the Puppeteer framework, enhancing its capabilities for efficient web scraping. It introduces a range of plugins, such as puppeteer-extra-plugin-stealth and others, designed to address common challenges encountered during scraping tasks. For instance, puppeteer-extra-plugin-stealth enhances stealth and anonymity during web scraping, a crucial aspect when dealing with anti-bot measures.

Installation

Before setting up Puppeteer Extra, ensure that the Node.js is installed on your machine. If not, you can download and install it from the Node.js website.

Once Node.js is installed, proceed to install Puppeteer Extra using npm:


npm install puppeteer puppeteer-extra

Setting up Puppeteer Extra

Now, let’s explore a basic example to set up Puppeteer Extra within your Puppeteer workflow:


const puppeteer = require('puppeteer-extra');
const stealthPlugin = require('puppeteer-extra-plugin-stealth');

Require the necessary modules, including Puppeteer and the desired Puppeteer Extra plugin (in this case, puppeteer-extra-plugin-stealth). With Puppeteer Extra seamlessly integrated, you can proceed with your web scraping logic.

Best Puppeteer Extra plugins for scraping

In this section, we’ll go through the most effective Puppeteer Extra plugins tailored for optimizing our web scraping tasks.

1. puppeteer-extra-plugin-stealth

The puppeteer-extra-plugin-stealth plugin is a critical tool for web scraping tasks, designed to enhance stealth and anonymity during interactions with target websites. It mitigates the risk of detection by anti-bot measures, ensuring a more discreet and effective scraping process. You can install it via the below command:


npm install puppeteer-extra-plugin-stealth

Using Puppeteer Stealth Plugin

Below is an example that demonstrates the use of puppeteer-extra-plugin-stealth for scraping purposes.


const puppeteer = require('puppeteer-extra');
const StealthPlugin = require('puppeteer-extra-plugin-stealth');

// Using the Stealth plugin
puppeteer.use(StealthPlugin());

(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();

  // Navigating to the target website
  await page.goto('https://example.com');

  // Scraping here
  const pageTitle = await page.title();
  console.log('Page Title:', pageTitle);
  await browser.close();
})();

This script imports the puppeteer-extra-plugin-stealth module and incorporates the Stealth plugin into the puppeteer instance using puppeteer.use(StealthPlugin()). Within the asynchronous function, we navigate to a target website and perform scraping operations such as extracting the page title.

2. puppeteer-extra-plugin-recaptcha

The puppeteer-extra-plugin-recaptcha plugin is a solution for handling Recaptcha challenges during web scraping. Recaptcha, designed to distinguish between human users and bots, often poses a hurdle for automated scraping. This plugin streamlines the process of solving Recaptcha puzzles, enabling more seamless and efficient scraping operations. You can install it via the below command:


npm install puppeteer-extra-plugin-recaptcha

Using Puppeteer Recaptcha Plugin

Below is the code example that demonstrates the use of puppeteer-extra-plugin-recaptcha for web scraping.


const puppeteer = require('puppeteer-extra');
const RecaptchaPlugin = require('puppeteer-extra-plugin-recaptcha');

// Using the Recaptcha plugin with API key
puppeteer.use(
  RecaptchaPlugin({
    provider: { id: '2captcha', token: 'YOUR_2CAPTCHA_API_KEY' },
    visualFeedback: true,
  })
);

(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();

  // Navigating to the target website with Recaptcha challenge
  await page.goto('https://example.com');

  // Waiting for Recaptcha to be solved
  await page.waitForSelector('your-target-element-selector');

  // Scraping here
  const scrapedContent = await page.$eval('your-target-element-selector', (element) => element.textContent);
  console.log('Scraped Content:', scrapedContent);
  await browser.close();
})();

In this script, the Recaptcha plugin is configured with a 2captcha API key for solving challenges, and the visualFeedback option is set to true for displaying the solving process. Within the asynchronous function, a Puppeteer browser is launched, a new page is created, and the script navigates to a website with a Recaptcha challenge. It waits for the Recaptcha to be solved using page.waitForSelector, focusing on a specific target element. Once the Recaptcha is resolved, the script extracts and logs the text content of a designated element using the page.$eval.

3. puppeteer-extra-plugin-adblocker

The puppeteer-extra-plugin-adblocker plugin is a valuable addition to web scraping tasks, offering a seamless solution for ad-blocking during scraping sessions. Its primary purpose lies in enhancing the efficiency of data extraction by preventing the loading of unnecessary and potentially disruptive ads on target websites. By leveraging this plugin, developers can streamline the scraping process, focusing solely on the relevant content while minimizing interference from advertisements. You can install it via the below command:


npm install puppeteer-extra-plugin-adblocker

Using Puppeteer Adblocker Plugin

The below code example illustrates how the adblocker plugin contributes to a more focused and efficient web scraping experience.


const puppeteer = require('puppeteer-extra');
const AdblockerPlugin = require('puppeteer-extra-plugin-adblocker');

// Using the Adblocker plugin
puppeteer.use(AdblockerPlugin());

(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();

  await page.goto('https://example.com');

  // Scraping here
  const scrapedContent = await page.$eval('your-target-element-selector', (element) => element.textContent);
  console.log('Scraped Content:', scrapedContent);

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

In this script, the puppeteer-extra-plugin-blocker is integrated into Puppeteer to block ads during the scraping process. The script then navigates to a website with ads, waits for a target element to be present, and extracts the text content of that element.

4. puppeteer-extra-plugin-proxy

The primary purpose of puppeteer-extra-plugin-proxy is to facilitate the integration of proxies with Puppeteer, enabling users to route their web scraping requests through different IP addresses. By leveraging this plugin, developers can mitigate the risk of IP blocking and diversity of their requests, ensuring a more reliable and discreet scraping operation. You can install it via the below command:


npm install puppeteer-extra-plugin-proxy

Using Puppeteer Proxy Plugin

The below code example not only shows the seamless integration of the proxy plugin but also showcases how it contributes to a more robust web scraping workflow.


const puppeteer = require('puppeteer-extra');
const ProxyPlugin = require('puppeteer-extra-plugin-proxy');

// Using the Proxy plugin with proxy settings
puppeteer.use(
  ProxyPlugin({
    proxy: 'your-proxy-address',
    // Additional proxy settings, if required
  })
);
(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();

  await page.goto('https://example.com');

  // Scraping here
  const scrapedContent = await page.$eval('your-target-element-selector', (element) => element.textContent);
  console.log('Scraped Content:', scrapedContent);

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

In the code, the puppeteer-extra-plugin-proxy is integrated with Puppeteer to enable web scraping through a proxy. The script navigates to a target website via the specified proxy server, allowing users to customize their proxy settings for enhanced anonymity.

5. puppeteer-extra-plugin-anonymize-ua

The primary purpose of puppeteer-extra-plugin-anonymize-ua is to mitigate the risk of detection by websites that scrutinize user agents to identify and block bots. By employing this plugin, developers can ensure a smooth scraping operation, as the plugin randomizes and anonymizes the user agent string with each request, making it challenging for websites to distinguish automated requests from genuine user traffic. You can install it via the below command:


npm install puppeteer-extra-plugin-anonymize-ua

Using Puppeteer Anonymize User Agent Plugin

The below example illustrates the role of puppeteer-extra-plugin-anonymize-ua in enhancing the stealth and anonymity of web scraping operations.


const puppeteer = require('puppeteer-extra');
const AnonymizeUAPlugin = require('puppeteer-extra-plugin-anonymize-ua');

// Using the Anonymize User Agent plugin
puppeteer.use(AnonymizeUAPlugin());

(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();

  await page.goto('https://example.com');
  // Scraping here
  const scrapedContent = await page.$eval('your-target-element-selector', (element) => element.textContent);
  console.log('Scraped Content:', scrapedContent);

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

In this example, the puppeteer-extra-plugin-anonymize-ua is integrated into Puppeteer to anonymize the user agent during web scraping. Inside the asynchronous function, the script navigates to a target website, ensuring that the user agent is anonymized, thereby reducing the risk of detection by websites employing user agent analysis. The page.$eval() method extracts the text content of a specified element on the webpage.

6. puppeteer-extra-plugin-block-resources

The puppeteer-extra-plugin-block-resources plugin is a valuable tool designed to enhance control over web scraping operations by allowing users to selectively block specified types of resources during page interactions. Its primary purpose is to optimize the scraping process by preventing the loading of unnecessary resources such as images, stylesheets, or scripts, thereby improving performance and reducing bandwidth consumption. This plugin provides users with the flexibility to tailor resource blocking according to their specific scraping requirements, contributing to more efficient and focused data extraction. You can install it via the below command:


npm install puppeteer-extra-plugin-block-resources

Using Puppeteer Block Resources Plugin

The example shows the use of puppeteer-extra-plugin-block-resources in streamlining web scraping tasks by avoiding the loading of extraneous content.


const puppeteer = require('puppeteer-extra');
const BlockResourcesPlugin = require('puppeteer-extra-plugin-block-resources');
// Using the Block Resources plugin to selectively block resources
puppeteer.use(
  BlockResourcesPlugin({
    blockedTypes: new Set(['image', 'stylesheet', 'font']),
  })
);

(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();

  // Navigating to the site with selectively blocked resources
  await page.goto('https://example.com');

  // Scraping here
  const scrapedContent = await page.$eval('your-target-element-selector', (element) => element.textContent);
  console.log('Scraped Content:', scrapedContent);

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

The script, by using the plugin configuration blockedTypes, navigates to a target website with certain resources (images, stylesheets, fonts) selectively blocked. This ensures that only the essential content is loaded, optimizing the scraping process. 

7. puppeteer-extra-plugin-devtools

The puppeteer-extra-plugin-devtools plugin provides developers with enhanced control and visibility into the inner workings of a Puppeteer session. Its primary purpose is to enable the use of Chrome DevTools Protocol (CDP) features during web scraping, empowering users to leverage advanced debugging and monitoring. This plugin offers a bridge to the extensive capabilities provided by the Chrome DevTools, allowing developers to access low-level browser operations, monitor network activity, and capture performance metrics. You can install it via the below command:


npm install puppeteer-extra-plugin-devtools

Using Puppeteer DevTools Plugin

The example demonstrates the use of the devtools plugin to harness the full power of Chrome DevTools for web scraping operations.


const puppeteer = require('puppeteer-extra');
const DevToolsPlugin = require('puppeteer-extra-plugin-devtools');

// Using the DevTools plugin
puppeteer.use(DevToolsPlugin());

(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();

  await page.goto('https://example.com');

  // Using a specific DevTools Protocol command
  await page.send('Network.setCacheDisabled', { cacheDisabled: true });

  // Scraping here
  const scrapedContent = await page.$eval('your-target-element-selector', (element) => element.textContent);
  console.log('Scraped Content:', scrapedContent);

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

In this code, the puppeteer-extra-plugin-devtools is integrated into Puppeteer to enable advanced control through the Chrome DevTools Protocol. The script, by using the plugin, navigates to a target website and employs a specific DevTools Protocol command i-e., Network.setCacheDisabled to disable the cache. This shows the plugin’s capability to access and utilize low-level browser operations. The subsequent scraping logic, represented by page.$eval() extracts the text content of the specified element on the webpage.

8. puppeteer-extra-plugin-user-preferences

The puppeteer-extra-plugin-user-preferences allows users to customize and override various browser preferences during a Puppeteer session. Its primary purpose is to offer fine-grained control over browser behavior by enabling the modification of preferences such as default language, geolocation settings, or content handling. This plugin enhances the adaptability of Puppeteer to diverse scraping scenarios, empowering users to tailor the browser environment to meet specific requirements. You can install it via the below command:


npm install puppeteer-extra-plugin-user-preferences

Using Puppeteer User Preferences Plugin

The below example shows the use of the user-preferences plugin in providing users with the ability to configure the browser environment according to their scraping needs.


const puppeteer = require('puppeteer-extra');
const UserPreferencesPlugin = require('puppeteer-extra-plugin-user-preferences');
// Using the User Preferences plugin with custom preferences
puppeteer.use(
  UserPreferencesPlugin({
    preferences: {
      'intl.accept_languages': 'en-US,en;q=0.9', // Set default language
      'geolocation.default': 'US', // Set default geolocation
    },
  })
);

(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();

  await page.goto('https://example.com');

  // Scraping here
  const scrapedContent = await page.$eval('your-target-element-selector', (element) => element.textContent);
  console.log('Scraped Content:', scrapedContent);

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

In this code, the puppeteer-extra-plugin-user-preferences is integrated into Puppeteer, allowing users to set custom preferences such as default language and geolocation. The script navigates to a target website with these custom user preferences, showcasing the flexibility of the plugin to adapt the browser environment.

Conclusion

In this article, we explored Puppeteer Extra and its selection of useful plugins, each designed to enhance the web scraping operations. From achieving anonymity to fine-tuning browser behavior, Puppeteer Extra is extremely flexible and a helpful tool when scraping websites with strict anti-scraping measures. The plugins not only address common challenges but also enhance privacy, efficiency, and control in web scraping tasks.

Related Articles

How to Use Puppeteer Stealth For Advanced Scraping?

Puppeteer Scraping: Get Started in 10 Minutes

Using Puppeteer on AWS Lambda for Scraping