страница ожидания. $ x () - функция XPath возвращает значение undefined - PullRequest
0 голосов
/ 19 февраля 2020

У меня проблема с запуском приведенного ниже кода, который является частью этого веб-учебника по очистке . В основном const [el] = await page.$x('//*[@id="text"]'); возвращает undefined независимо от того, какой URL или выражение я передаю. Я также попытался использовать полный XPath, но он выдает ту же ошибку. Любая помощь или идеи высоко ценятся.

const puppeteer = require("puppeteer");
(async () => {
  try {
    const browser = await puppeteer.launch();
    const page = await browser.newPage();
    await page.goto("https://www.youtube.com/c/codedrip");
    const [el] = await page.$x('//*[@id="text"]');
    // [el] is undefined here so code below throws error
    const text = await el.getProperty("textContent");
    const name = await text.jsonValue();
    await browser.close();
    console.log(text);
  } catch (e) {
    console.log("our err : ", e);
  }
})();

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

Кажется, что код работает, если кукловод установлен на {headless:false} и полный XPath передается в page.$x. Как и в следующем коде:

(async () => {
  try {
    const browser = await puppeteer.launch({ headless: false });
    const page = await browser.newPage();
    await page.goto("https://www.youtube.com/c/codedrip");
    const [el] = await page.$x(
      "/html/body/ytd-app/div/ytd-page-manager/ytd-browse/div[3]/ytd-c4-tabbed-header-renderer/app-header-layout/div/app-header/div[2]/div[2]/div/div[1]/div/div[1]/ytd-channel-name/div/div/yt-formatted-string"
    );
    const text = await el.getProperty("textContent");
    const name = await text.jsonValue();
    await browser.close();
    console.log("Channel Name: ", name);
  } catch (e) {
    console.log("our err : ", e);
  }
})();

Но я бы предпочел, чтобы код запускался в режиме «без головы», поскольку это обычно является основной целью приложения для просмотра веб-страниц.

...