У меня проблема с запуском приведенного ниже кода, который является частью этого веб-учебника по очистке . В основном 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);
}
})();
Но я бы предпочел, чтобы код запускался в режиме «без головы», поскольку это обычно является основной целью приложения для просмотра веб-страниц.