Я пытаюсь сканировать страницу википедии, используя кукловод.Я предпочитаю использовать синтаксис xpath для селекторов, потому что считаю его более мощным.
В документации говорится, что как $x
, так и метод $
должны возвращать ElementHandle
с$x
метод, возвращающий массив.
$ Документы
$ x Документы
Если я запускаю два моих тестовых запроса в ChromeКонсоль на рассматриваемой странице, я получаю идентичные результаты.Если я запрашиваю оба селектора, не пытаясь оценить результат в кукловоде, я также получаю идентичные результаты.

Проблема возникает, когда я пытаюсь использоватьevaluate
метод, ElementHandle из селектора $ x, кажется, не правильно.Но мне трудно понять, что я делаю неправильно.
Вот пример кода.Я удалил асинхронные методы в их .then.catch, чтобы помочь локализовать проблему.
const puppeteer = require('puppeteer');
(async() => {
const searchUrl = "https://en.wikipedia.org/wiki/German_national_football_team"
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto(searchUrl);
const xPathSelector = page.evaluate(
el => el.outerHTML,
await page.$x("//table[@class='infobox']//th[contains(.,'Head')]/following-sibling::td/a")[0])
.then(
result => console.log(result)
).catch( e => {
console.log('XPath Error', e)
})
const normSelector = await page.evaluate(
el => el.outerHTML,
await page.$("#mw-content-text > div > table:nth-child(2) > tbody > tr:nth-child(5) > td > a"))
.then(
result => console.log(result)
).catch( e => {
console.log('XPath Error', e)
})
await browser.close()
})()