【问题标题】:Puppeteer/Chromium proxy ERR_TUNNEL_CONNECTION_FAILEDPuppeteer/Chromium 代理 ERR_TUNNEL_CONNECTION_FAILED
【发布时间】:2020-08-26 09:42:16
【问题描述】:

我想在 docker 中使用 puppeteer,但在任何网站的 https 版本中出现错误

我的码头文件:

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 \
    && apt-get install -y wget gnupg \
    && wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add - \
    && sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list' \
    && apt-get update \
    && 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 \
    && 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 && 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 环境,没有任何成功。

我刚刚尝试过不使用 docker,同样的事情,所以与 docker 无关:/

你有什么想法吗?

【问题讨论】:

    标签: docker google-chrome puppeteer


    【解决方案1】:

    这绝对是您的代理设置问题,而不是 puppeteer 或 docker。不幸的是,我无权访问您的代理,因此我无法复制它。但我首先想到的是——在使用 https 代理时,您通常必须进行身份验证。您可以在导航之前使用page.authenticate 传递用户名和密码:

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

    这些通常是一些域凭据。

    我想到的另一件事是证书错误,但我已经看到你ignoreHTTPSErrors :)

    如果身份验证不起作用,我建议打开 Chrome 并检查那里的代理设置 - 也许您还缺少其他东西?

    【讨论】:

    • 感谢您的回复,但它是一个 http 代理,所以我不必进行身份验证 :) 我尝试使用 wget 获取页面,完全没有问题:/跨度>
    • 你能分享一下使用的 wget 命令吗?只是wget https://example.com?
    • 顺便说一句,也许这样的代理链会有所帮助:github.com/puppeteer/puppeteer/issues/…
    • 只是一个简单的wget https://example.com,我的环境变量http_proxy和https_proxy设置为10.156.10.155:3128
    • 代理链没有帮助,同样的错误:Trace: Error: net::ERR_TUNNEL_CONNECTION_FAILED at https://example.com
    【解决方案2】:

    对于那些有同样问题的人,请在 puppeteer.launch 中使用选项 --user-agent:

    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'
        ]
      });
    

    【讨论】:

      猜你喜欢
      • 2023-04-02
      • 2021-01-24
      • 2021-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多