J'essaye d'obtenir les éléments dans une structure qui ressemble à ceci:
let object = { key1: "key1", value1: "value1", key2: "key2", value2: "value2" }
Voici ce que j'aimerais faire en pur JS:
let list = await page.evaluate(() => Array.from(document.querySelectorAll('.foo-bar'), element => element)) let key = list[0] //returns empty object ({})
Voici où je suis:
let list = document.querySelectorAll('.foo-bar') let key = list[0].children[0].innerText // would give me "Key"
EDIT:
J'ai besoin d'accéder à toutes les clés / valeurs dt
. De préférence, les ajouter à un objet comme celui-ci:
<dl class="foo-bar"> <dt>Key</dt> <dd>Value<dd> <dt>Key</dt> <dd>Value<dd> .... </dl>
Je sais que la structure de l'objet n'a pas beaucoup de sens mais ce n'est pas vraiment pertinent.
p >
3 Réponses :
Si vous n'avez besoin que du premier texte dt
, vous devez le demander directement:
await page.evaluate(() => document.querySelector('.foo-bar dt').innerText)
Je vois que ma question initiale n'était pas claire, mais que je l'ai mise à jour maintenant. J'ai besoin d'accéder à tous les éléments dt
Le sélecteur Vous pouvez également utiliser Voici un exemple de la façon dont vous pouvez utiliser .foo-bar dt, .foo-bar dd
devrait vous donner un tableau de tous les
et
. // Stubbing the list data for example.
const list = [
{ innerText: 'key1' },
{ innerText: 'value1' },
{ innerText: 'key2' },
{ innerText: 'value2' },
{ innerText: 'key3' },
{ innerText: 'value3' }
]
const test = list.reduce((acc, v, i) => {
// Map even items as properties and odd items as values to prev property.
i % 2 === 0 ? acc[v.innerText] = null : acc[list[i-1].innerText] = v.innerText;
return acc;
}, {});
console.log(test);
$$ ()
méthode de page , qui est essentiellement document.querySelectorAll ()
. Voici un exemple: const list = await page.$$('.foo-bar dt, .foo-bar dd');
const key = list[0].innerText;
reduction ()
sur votre tableau pour le transformer en l'objet dont vous avez besoin: const list = await page.evaluate(() => document.querySelectorAll('.foo-bar dt, .foo-bar dd'));
const key = list[0].innerText;
L'ajustement de la réponse @Vaviloffs a résolu le problème!
Je crée simplement un tableau de tous les éléments dt
et dd
avec
let list = await page.evaluate(() => Array.from(document.querySelectorAll('.foo-bar dt, .foo-bar dd'), element => element.textContent))