All Projects → gajus → puppeteer-proxy

gajus / puppeteer-proxy

Licence: other
Proxies Puppeteer Page requests.

Programming Languages

javascript
184084 projects - #8 most used programming language

Projects that are alternatives of or similar to puppeteer-proxy

MagicMouse
A webbrowser for Squeak using Chrome/Chromium. Not to be confused with a highly innovative pointing device.
Stars: ✭ 24 (-86.05%)
Mutual labels:  puppeteer
puppeteer-jest-starter
A starter-kit quipped with the minimal requirements for Puppeteer + Jest, making E2E testing a breeze.
Stars: ✭ 17 (-90.12%)
Mutual labels:  puppeteer
readme-ascii
Turns text into images of ASCII art for GitHub README files.
Stars: ✭ 48 (-72.09%)
Mutual labels:  puppeteer
ZSpider
基于Electron爬虫程序
Stars: ✭ 37 (-78.49%)
Mutual labels:  puppeteer
webgif
Easily generate animated GIFs from websites
Stars: ✭ 98 (-43.02%)
Mutual labels:  puppeteer
puppeteer-loadtest
load test puppeteer (Headless Chrome API) script using node
Stars: ✭ 107 (-37.79%)
Mutual labels:  puppeteer
snap-this
A tool to make quick screenshots for multiple mobile devices of your web app in a couple of minutes.
Stars: ✭ 31 (-81.98%)
Mutual labels:  puppeteer
simplechrome
Webrecorders DevTools Protocol Automation Library
Stars: ✭ 16 (-90.7%)
Mutual labels:  puppeteer
abeamer
frame-by-frame Web Animation framework
Stars: ✭ 49 (-71.51%)
Mutual labels:  puppeteer
Puppetry
基于Puppeteer的页面E2E测试GUI工具
Stars: ✭ 35 (-79.65%)
Mutual labels:  puppeteer
double-agent
A test suite of common scraper detection techniques. See how detectable your scraper stack is.
Stars: ✭ 123 (-28.49%)
Mutual labels:  puppeteer
barclayscrape
A small app to programmatically mainpulate Barclays online banking
Stars: ✭ 57 (-66.86%)
Mutual labels:  puppeteer
trafficator
Traffic generator for local analytics testing
Stars: ✭ 27 (-84.3%)
Mutual labels:  puppeteer
top.gg-automatic-voter
This is a script that votes for specified bot automatically per 12 hours on top.gg
Stars: ✭ 144 (-16.28%)
Mutual labels:  puppeteer
pdf
Micro-service for generating PDF files using Puppeteer with an Express API
Stars: ✭ 16 (-90.7%)
Mutual labels:  puppeteer
codepen-puppeteer
Use Puppeteer to download pens from Codepen.io as single html pages
Stars: ✭ 22 (-87.21%)
Mutual labels:  puppeteer
mugshot
Framework independent visual testing library
Stars: ✭ 126 (-26.74%)
Mutual labels:  puppeteer
hardcider
🍺 CLI for quickly generating citations for websites and books
Stars: ✭ 17 (-90.12%)
Mutual labels:  puppeteer
akamai-toolkit
A set of tools to work on Akamai v1 anti-bot solution. Current supported version: 1.70
Stars: ✭ 215 (+25%)
Mutual labels:  puppeteer
http-server-pwa
👾 http-server alike but for serving and rendering PWA: pwa-server
Stars: ✭ 14 (-91.86%)
Mutual labels:  puppeteer

puppeteer-proxy 🎎

Travis build status Coveralls NPM version Canonical Code Style Twitter Follow

Proxies Puppeteer Page requests.

Motivation

This package addresses several issues with Puppeteer:

  • It allows to set a proxy per Page and per Request (#678)
  • It allows to authenticate against proxy when making HTTPS requests (#3253)

The side-benefit of this implementation is that it allows to route all traffic through Node.js, i.e. you can use externally hosted Chrome instance (such as Browserless.io) to render DOM & evaluate JavaScript, and route all HTTP traffic through your Node.js instance.

The downside of this implementation is that it will introduce additional latency, i.e. requests will take longer to execute as request/ response will need to be always exchanged between Puppeteer and Node.js.

Implementation

puppeteer-proxy intercepts requests after it receives the request metadata from Puppeteer. puppeteer-proxy uses Node.js to make the HTTP requests. The response is then returned to the browser. When using puppeteer-proxy, browser never makes outbound HTTP requests.

Setup

You must call page.setRequestInterception(true) before using pageProxy.proxyRequest.

API

import {
  Agent as HttpAgent,
} from 'http';
import {
  Agent as HttpsAgent,
} from 'https';
import type {
  Page,
  Request,
} from 'puppeteer';
import {
  proxyRequest,
} from 'puppeteer-proxy';

/**
 * @property agent HTTP(s) agent to use when making the request.
 * @property page Instance of Puppeteer Page.
 * @property proxyUrl HTTP proxy URL. A different proxy can be set for each request.
 * @property request Instance of Puppeteer Request.
 */
type ProxyRequestConfigurationType = {|
  +agent?: HttpAgent | HttpsAgent,
  +page: Page,
  +proxyUrl?: string | { http: string, https: string },
  +request: Request,
|};

proxyRequest(configuration: ProxyRequestConfigurationType): PageProxyType;

Usage

Making a GET request using proxy

import puppeteer from 'puppeteer';
import {
  proxyRequest,
} from 'puppeteer-proxy';

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

  await page.setRequestInterception(true);

  page.on('request', async (request) => {
    await proxyRequest({
      page,
      proxyUrl: 'http://127.0.0.1:3000',
      request,
    });
  });

  await page.goto('http://gajus.com');
})();
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].