Ваше выражение XPath допустимо, но вы возвращаете text()
вместо самого узла. page.$x
ожидает, что XPath вернет элемент, поэтому ваш код не работает. Чтобы вернуть узел, вам нужно запросить элемент span.
const element = await page.$x("//span[contains(translate(text(), 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'), 'two')]");
Обратите внимание, что text()
работает только для текстовых узлов. Если у вас смешанный контент (содержащий элементы и текст), вы должны использовать строковое значение (.
вместо text()
):
const element = await page.$x("//span[contains(translate(., 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'), 'two')]");
Для сравнения выражений я поместил их друг под другом:
//span//text()[contains(translate(., 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'), 'two')]
//span[contains(translate(text(), 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'), 'two')
//span[contains(translate(., 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'), 'two')]
Первое - это выражение (данное вами) для текста узла span. Второй запрашивает сам узел, используя text()
. Последний использует строковое значение для запроса узла.