Node Js & Puppeteer - Как выбрать текст, заключенный в тег Anchor - PullRequest
2 голосов
/ 10 апреля 2020

В данный момент я работаю над проектом, столкнулся с ошибкой и мне нужна ваша помощь!

В основном я пытаюсь выделить обернутый текст внутри следующего тега привязки

<a href="..." class="productDetailsLink js-productName">Product Name</a>

Это мой текущий код:

 await page.waitForSelector('div > div > div > div > div > a[class = "productDetailsLink js-productName"')
        .then(() => page.evaluate(() => {
            const itemArray = [];
            const itemNodeList = document.querySelectorAll('div > div > div > div > div > a[class = "productDetailsLink js-productName"');


            itemNodeList.forEach(item => {
                const itemTitle = item.querySelectorAll('div > div > div > div > div > a[class = "productDetailsLink js-productName"').innerText;
                console.log(itemTitle);
            })
        } ))

Однако мне не повезло. У меня закончились идеи о том, как почистить такой текст.

За любую помощь, за которую я буду вечно благодарен :) Будьте там и оставайтесь 127.0.0.1!

Ответы [ 2 ]

1 голос
/ 10 апреля 2020

Если эти атрибуты класса являются уникальными для этого конкретного якоря <a href="..." class="productDetailsLink js-productName">Product Name</a>, можно использовать следующий метод:

await page.evaluate(() => {
 let anchorText = document.querySelector('a.productDetailsLink.js-productName').innerHTML;
 console.info("anchorText::", anchorText);
});

/*OR another way*/
await page.$eval('a.productDetailsLink.js-productName', e => e.innerHTML);

Если существует список якорей:

await page.evaluate(() => {
 let anchorList = document.querySelectorAll('a.productDetailsLink.js-productName');
 anchorList.forEach(e => {
  let anchorText = e.innerHTML;
  console.info("anchorText::", anchorText);
 });
});
1 голос
/ 10 апреля 2020

Не знаю, как работает Puppeteer, но я добился большого успеха, используя cheerio (https://www.npmjs.com/package/cheerio) для разбора соскоба html с phantom.

Я думаю, что вы можете использовать кукловода как фатом для соскоба и использовать cheerio для соскоба HTML содержимое, как показано ниже:

const cheerio = require('cherio');
const $ = cheerio.load(content); // content is your HTML scraped
result = $('. productDetailsLink').text();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...