У меня есть веб-страница с некоторыми данными, которые я хочу извлечь. Поэтому я открываю Консоль разработки Chrome и печатаю:
$x('//a[contains(@class, "link-class")]/text()')
но у меня есть:
[text, text, text]
вместо списка строк. Есть ли какие-либо, чтобы получить список стрингов, которые я могу скопировать в свой блокнот, excel и т.д.?
$ x() возвращает элементы DOM (в данном случае текстовые узлы), поэтому вам нужен шаг для извлечения строки изнутри. Возможно, вам повезет больше
$x('//a[contains(@class, "link-class")]').map( elt => elt.innerText );
Вы можете использовать метод Array.forEach(..)
для прохождения через элементы DOM, возвращаемые $x()
и регистрировать их данные:
$x('//a[contains(@class, "link-class")]/text()').forEach((a) => console.log(a.data))
Для строки текстов, разделенных \n
используйте:
$x('//a[contains(@class, "link-class")]/text()').map((a) => a.data).join('\n')
В консоли вы можете просто набрать copy('some data')
и скопировать в буфер обмена. Вам все равно придется форматировать информацию в первую очередь.
Попробуйте следующее:
const formatted = JSON.stringify($x('//a[contains(@class, "link-class")]/text()').map((a) => a.data));
copy(formatted);
console.dir($x('//a[contains(@class, "link-class")]/text()'))
$x(...).map((a) => a.data))
.
если у вас есть массив и вы хотите его распечатать, вы можете просто сделать:
console.log(arr.join("\n"));
в вашем случае тогда
console.log(
$x('//a[contains(@class, "link-class")]/text()')
.map(el => el.innerText)
.join("\n")
);
вы также можете форматировать их так:
console.log(arr.map((el, ix) => ix + " : " + el.innerText).join("\n"));
получить:
0: text1
1: text2
.map(el => el.innerText)
отсутствовал, чтобы получить текст из элемента dom.