https://github.com/puppeteer/puppeteer/issues/1837

WSL のPuppeteer からWindows にインストールされたChrome(chrome.exe) を起動します。
WSL 側にインストールするパッケージが少なくてすみそうです。

環境

  • WSL1(Ubuntu 18.04) on Windows 10
  • node v13.6.0
  • npm 6.13.4
  • puppeteer

構築

node のインストール

$ sudo apt update && sudo apt upgrade
$ sudo apt install nodejs npm
$ sudo npm clean all
$ sudo npm install n
$ sudo n latest
$ sudo ln -sf /usr/local/bin/node /usr/bin/node
$ sudo apt purge nodejs npm
$ sudo apt clean all
$ sudo apt autoremove

puppeteer のインストール

$ npm i -S puppeteer

PATH の追加

$HOME/.profile
PATH=/mnt/c/Program\ Files\ \(x86\)/Google/Chrome/Application:$PATH

スクリプト

$HOME/crawl.js
const puppeteer = require('puppeteer');
const rimraf = require('rimraf');

const USER_DATA_DIR = 'C:\\temp\\puppeteer_user_data';
const USER_DATA_DIR_WSL = '/mnt/c/temp/puppeteer_user_data';

const PROXY_URL = 'http://192.168.0.100:8000';
const PROXY_USER = 'proxy-user-string';
const PROXY_PASSWORD = 'proxy-password-string';

async function main() {
const browser = await puppeteer.launch({
executablePath: 'chrome.exe',
userDataDir: USER_DATA_DIR,
headless: false,
args: [
'--no-sandbox',
'--disable-setuid-sandbox',
`--proxy-server=${PROXY_URL}`
]
});
const page = await browser.newPage();

// proxy auth
await page.authenticate({PROXY_USER, PROXY_PASSWORD});

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

await browser.close();
})().finally(() => rimraf(USER_DATA_DIR_WSL));

多分、こんな感じで動いた。

利用

$ node crawl.js