Передача страницы Puppeteer в качестве параметров в функции не работает должным образом - PullRequest
1 голос
/ 10 октября 2019

Intro

loginLinkedin возвращает меня на страницу входа, а затем возвращает для меня страницу кукловода, которая затем назначается пользователю root, поэтому у меня все еще могут быть дополнительные параметры для работы с ним.

const root = await loginToLInkined("https://www.linkedin.com/login");

    await root.goto(url);
    max_page = await getMaxPage(root);
    console.log("max page",max_page)

Я тогда goto(url)

url - это еще одна страница, на которую мне нужно перейти.

после этого я звоню на getMaxPage(root) с корнем в качестве параметра, поэтому я могу evaluate() в этой функции

Проблема

const getMaxPage = async root => {
  const maxPage = await root.evaluate(()=> {
    return document.querySelector(
      "li.artdeco-pagination__indicator:nth-last-Child(1)"
    );
  });
  console.log(maxPage)
  return parseInt(maxPage.innerText);
};

Проблема в том, что когда я console.log (maxPage) он возвращает неопределенное, и я понял, чтодобавление параметра root sa на самом деле не работает так, как я должен.

Что я делаю неправильно и как это правильно сделано.

Примечание. Я действительно пытался получить root права. оценить без добавления функции и добавления корня в качестве параметра, и он на самом деле вернул мне maxpage

1 Ответ

2 голосов
/ 11 октября 2019

Проблема в что вы возвращаете из page.evaluate():

const maxPage = await root.evaluate(()=> {
    return document.querySelector(
      "li.artdeco-pagination__indicator:nth-last-Child(1)"
    );
});

Это узел DOM, который является сложным объектом, который не может быть сериализован и возвращаемое значение должно быть сериализуемым, чтобы его можно было вернуть обратно в узел из Chromium.

Итак, чтобы исправить это и все будущие сценарии просто возвращают только то, что нужно и что можетбыть без ошибок. Как правильно заметил в комментарии pguardiario, в этом случае достаточно вернуть innerText с этого узла:

const maxPage = await root.evaluate(()=> {
  return document.querySelector("li.artdeco-pagination__indicator:nth-last-Child(1)").innerText;
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...