首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >木偶剧/铬代理ERR_TUNNEL_CONNECTION_FAILED

木偶剧/铬代理ERR_TUNNEL_CONNECTION_FAILED
EN

Stack Overflow用户
提问于 2020-08-26 17:42:16
回答 2查看 1.6K关注 0票数 0

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

我的dockerfile:

代码语言:javascript
复制
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:

代码语言:javascript
复制
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版本我有这个错误:

代码语言:javascript
复制
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无关:/

你有什么想法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-08-27 22:34:54

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

代码语言:javascript
复制
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'
    ]
  });
票数 0
EN

Stack Overflow用户

发布于 2020-08-26 23:55:22

这绝对是您的代理设置的问题,而不是傀儡或docker。不幸的是,我无法访问您的代理,因此我没有办法复制它。但我想到的第一件事是--使用https proxy时,你通常需要进行身份验证。在进行导航之前,您可以使用page.authenticate传递用户名和密码:

代码语言:javascript
复制
page.authenticate({username:'user', password:'password'});

这些通常是一些域凭据。

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63594843

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档