Puppeteer 在本地工作会罚款,但部署后不会?

问题描述 投票:0回答:1

我的浏览器是这样启动的:

async function startBrowser() {


const browser = await puppeteer.launch({
    args: [
      '--no-sandbox',
      '--disable-gpu',
      '--disable-dev-shm-usage',
      '--disable-setuid-sandbox',
      '--no-first-run',
      '--no-zygote',
      '--single-process',
    ],
  });
  const page = await browser.newPage();
  return { browser, page };
}

我有一个被调用的函数来运行此代码:

    const { browser, page } = await startBrowser();
  const tab = await browser.newPage()
  const request = await (await tab.goto(``));
  await page.goto(``);
  console.log('scraping...');
  console.log(page.url());
  await page.screenshot({
    path: `frontend/public/assets/${coinId}.png`,
  });
  const text = await request.text();
  const $ = cheerio.load(text);
  const coinImage = $('#one img').attr('src');
  const coinTitle = $('#three div h1').text();
  const bids = $('#bidsrow td input').attr('value');
  const timeLeft = $('#endsrow #endstext').text();
  const currentBid = $('#currentbidtext').text();
  const itemId = $('#itemidrow td .bolder').text();
  const minBid = $('#minimumbidtext').text().replace('$', '');

在我的本地计算机上,它可以完美地抓取数据,但是当我将此应用程序部署到 Heroku 甚至 AWS EC2 时,它似乎没有抓取任何内容?并且只返回空数据。

这是因为浏览器没有正确启动吗?或者 ? 花了一整天的时间将该应用程序部署到 heroku 和 aws,但仍然很困惑出了什么问题?

node.js amazon-web-services heroku puppeteer cheerio
1个回答
0
投票

浏览器启动方面的一些变化

const 浏览器 = 等待 puppeteer.launch({ 参数:[ “--禁用-setuid-沙箱”, “--无沙箱”, “--单进程”, “--无合子”, ], 可执行路径:process.env.NODE_ENV = =“生产”? process.env.PUPPETEER_EXECUTABLE_PATH : puppeteer.executablePath(), });

在主目录添加Dockerfile

来自 ghcr.io/puppeteer/puppeteer:22.4.1

ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true
PUPPETEER_EXECUTABLE_PATH=/usr/bin/google-chrome-stable

工作目录/usr/src/app

复制包*.json ./ 运行 npm ci

复制。 .

CMD ["node","app.js"] /* app.js 替换为你的起始节点 */

注意:不要忘记添加 env 变量来添加渲染环境。

© www.soinside.com 2019 - 2024. All rights reserved.