Ошибка кукловода: не удалось выполнить переход из-за отключения браузера. - PullRequest
0 голосов
/ 14 июля 2020

Я использую кукольник в Google App Engine с Node.JS

всякий раз, когда я запускаю кукольник на движке приложения, я получаю сообщение об ошибке:

Сбой при навигации из-за отключения браузера!

Это отлично работает в локальной среде, поэтому я предполагаю, что это проблема с движком приложения.

const browser = await puppeteer.launch({
    ignoreHTTPSErrors: true,
    headless: true,
    args: ["--disable-setuid-sandbox", "--no-sandbox"],
});

Это файл app.yaml моего движка приложений

runtime: nodejs12

env: standard

handlers:
  - url: /.*
    secure: always
    script: auto

- - РЕДАКТИРОВАТЬ -

Он работает, когда я добавляю аргумент --disable-dev-shm-usage, но тогда всегда время ожидания. Вот мои коды.

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

try {
  const url = "https://seekingalpha.com/market-news/1";
  const pageOption = {
    waitUntil: "networkidle2",
    timeout: 20000,
  };

  await page.goto(url, pageOption);
} catch (e) {
  console.log(e);
  await page.close();
  await browser.close();
  return resolve("error at 1");
}

try {
  const ulSelector = "#latest-news-list";
  await page.waitForSelector(ulSelector, { timeout: 30000 });
} catch (e) {
  // ALWAYS TIMEOUTS HERE!
  console.log(e);
  await page.close();
  await browser.close();
  return resolve("error at 2");
}
...

1 Ответ

1 голос
/ 15 июля 2020

Похоже, проблема заключалась в объеме памяти движка приложения.

Когда памяти недостаточно, чтобы справиться с обходом кукловода,

Он автоматически генерирует другой экземпляр.

Однако, Вновь созданный экземпляр имеет другой браузер кукловода.

Следовательно, это приводит к Navigation failed because browser has disconnected.

Решение состоит в том, чтобы просто обновить экземпляр движка приложения, чтобы он мог справиться с заданием сканирования с помощью одного instance.

экземпляр по умолчанию - F1 с 256 МБ памяти, поэтому я обновился до F4, который имеет 1 ГБ памяти, тогда он больше не отображает сообщение об ошибке.

runtime: nodejs12

instance_class: F4

handlers:
  - url: /.*
    secure: always
    script: auto
...