ОШИБКА прокси-сервера Puppeteer / CHROMIUM_TUNNEL_CONNECTION_FAILED

#docker #google-chrome #puppeteer

#docker #google-chrome #кукловод

Вопрос:

Я хочу использовать puppeteer внутри docker, но получил ошибку с https-версией любых веб-сайтов

Мой файл dockerfile:

 FROM node:14.8.0-slim

ENV http_proxy http://10.156.10.155:3128
ENV https_proxy http://10.156.10.155:3128

RUN apt-get update 
    amp;amp; apt-get install -y wget gnupg 
    amp;amp; wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add - 
    amp;amp; sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list' 
    amp;amp; apt-get update 
    amp;amp; apt-get install -y nano vim google-chrome-stable fonts-ipafont-gothic fonts-wqy-zenhei fonts-thai-tlwg fonts-kacst fonts-freefont-ttf libxss1 
      --no-install-recommends 
    amp;amp; rm -rf /var/lib/apt/lists/*

RUN npm config set proxy http://10.156.10.155:3128
RUN npm config set https-proxy http://10.156.10.155:3128
RUN npm i puppeteer@5.2.1

ADD screenshot.js /app/screenshot.js

RUN groupadd -r pptruser amp;amp; useradd -r -g pptruser -G audio,video pptruser
RUN chown -R pptruser:pptruser /app


USER pptruser

WORKDIR /app
# CMD ["node", "index.js"]
  

И screenshot.js:

 const puppeteer = require('puppeteer');

(async () => {
  const browser = await puppeteer.launch({
    headless: true,
    ignoreHTTPSErrors: true,
    args: ['--disable-dev-shm-usage', 
      '--proxy-server=http://10.156.10.155:3128',
      '--no-sandbox',
      '--disable-setuid-sandbox'

    ]
  });

  const page = await browser.newPage();
  await page.setUserAgent('Mozilla/5.0 (Windows NT 6.1; rv:60.7) Gecko/20100101 Firefox/60.7');
  await page.goto('https://example.com');
  await page.screenshot({path: 'example.png'});

  await browser.close();
})().catch(error => console.trace(error));
  

У меня нет ошибки дляhttp://example.com , но у меня есть эта ошибка для версии https:

 Trace: Error: net::ERR_TUNNEL_CONNECTION_FAILED at https://example.com
    at navigate (/node_modules/puppeteer/lib/cjs/puppeteer/common/FrameManager.js:113:23)
    at processTicksAndRejections (internal/process/task_queues.js:97:5)
    at async FrameManager.navigateFrame (/node_modules/puppeteer/lib/cjs/puppeteer/common/FrameManager.js:88:21)
    at async Frame.goto (/node_modules/puppeteer/lib/cjs/puppeteer/common/FrameManager.js:405:16)
    at async Page.goto (/node_modules/puppeteer/lib/cjs/puppeteer/common/Page.js:826:16)
    at async /app/screenshot.js:19:3
    at /app/screenshot.js:23:29
    at processTicksAndRejections (internal/process/task_queues.js:97:5)
  

Я пробовал настройки http_proxy и https_proxy env, но безуспешно.

Я только что попробовал без docker, и то же самое, поэтому не связано с docker :/

У вас есть какие-либо идеи?

Ответ №1:

Это определенно зависит от настроек вашего прокси, а не от puppeteer или docker. К сожалению, у меня нет доступа к вашему прокси, поэтому я не могу его воспроизвести. Но первое, что приходит мне в голову, — обычно вам приходится проходить аутентификацию при использовании прокси-сервера https. Вы можете передать имя пользователя и пароль с помощью page.authenticate перед выполнением навигации:

 page.authenticate({username:'user', password:'password'});
  

Обычно это некоторые учетные данные домена.

Другая вещь, которая приходит мне на ум, — это ошибки сертификата, но я уже вижу вас ignoreHTTPSErrors 🙂

Если аутентификация не работает, я предлагаю открыть Chrome и проверить настройки прокси там — может быть, вы упускаете что-то еще?

Комментарии:

1. Спасибо за ответ, но это http-прокси, поэтому мне не нужно проходить аутентификацию 🙂 Я пытался получить страницу с помощью wget, и никаких проблем вообще не возникло :/

2. Не могли бы вы поделиться используемой командой wget? просто wget https://example.com ?

3. Кстати, может быть, такая прокси-цепочка могла бы помочь: github.com/puppeteer/puppeteer/issues /…

4. Просто wget https://example.com , мои env var http_proxy и https_proxy установлены на 10.156.10.155:3128

5. прокси-цепочка не помогла, та же ошибка: Trace: Error: net::ERR_TUNNEL_CONNECTION_FAILED at https://example.com

Ответ №2:

Для тех, у кого такая же проблема, используйте опцию —user-agent в puppeteer.запуск:

 const browser = await puppeteer.launch({
    headless: true,
    ignoreHTTPSErrors: true,
    args: ['--disable-dev-shm-usage',
      '--proxy-server=http://10.156.10.155:3128',
      '--user-agent="Mozilla/5.0 (Windows NT 6.1; rv:60.7) Gecko/20100101 Firefox/60.7"',
      '--no-sandbox',
      '--disable-setuid-sandbox'
    ]
  });