J'ai une configuration js de marionnettiste et j'ai pu obtenir toutes les lignes en utilisant
let rows = await page.$$eval('#myTable tr', row => row);
Maintenant, je veux que chaque ligne obtienne des "td" et puis obtienne le texte intérieur de ceux-ci.
Fondamentalement, je veux faire ceci:
var tds = myRow.querySelectorAll("td");
où myRow est une ligne de table, avec puppeteer.js
Une façon d'y parvenir consiste à utiliser evalu qui obtient d'abord un tableau de tous les TD's
renvoie ensuite le textContent de chaque TD
const puppeteer = require('puppeteer');
const html = `
<html>
<body>
<table>
<tr><td>One</td><td>Two</td></tr>
<tr><td>Three</td><td>Four</td></tr>
</table>
</body>
</html>`;
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto(`data:text/html,${html}`);
const data = await page.evaluate(() => {
const tds = Array.from(document.querySelectorAll('table tr td'))
return tds.map(td => td.innerHTML)
});
//You will now have an array of strings
//[ 'One', 'Two', 'Three', 'Four' ]
console.log(data);
//One
console.log(data[0]);
await browser.close();
})();
Vous pouvez également utiliser quelque chose comme: -
const data = await page.$$eval('table tr td', tds => tds.map((td) => {
return td.innerHTML;
}));
//[ 'One', 'Two', 'Three', 'Four' ]
console.log(data);