Je travaille sur un projet en ce moment, j'ai rencontré une erreur et j'ai besoin de votre aide!

Fondamentalement, j'essaie de sélectionner le texte enveloppé dans la balise d'ancrage suivante

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

Voici mon code actuel:

 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);
            })
        } ))

Cependant, je n'ai pas de chance. Je suis à court d'idées sur la façon de gratter un tel texte.

3
Brógán McShane 10 avril 2020 à 17:16

2 réponses

Meilleure réponse

Si ces attributs de classe sont uniques à cette ancre particulière <a href="..." class="productDetailsLink js-productName">Product Name</a>, la méthode suivante peut être utilisée:

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);

S'il existe une liste d'ancres:

await page.evaluate(() => {
 let anchorList = document.querySelectorAll('a.productDetailsLink.js-productName');
 anchorList.forEach(e => {
  let anchorText = e.innerHTML;
  console.info("anchorText::", anchorText);
 });
});
1
ambianBeing 10 avril 2020 à 17:23

Je ne sais pas comment fonctionne Puppeteer, mais j'ai eu beaucoup de succès avec cheerio (https: // www .npmjs.com / package / cheerio) pour analyser le HTML récupéré avec phantom.

Je pense que vous pouvez utiliser marionnettiste comme fantôme pour gratter et utiliser cheerio sur le contenu HTML récupéré comme ceci ci-dessous:

const cheerio = require('cherio');
const $ = cheerio.load(content); // content is your HTML scraped
result = $('. productDetailsLink').text();
1
VPaul 10 avril 2020 à 14:27