Hé ! Cela fait un moment depuis la dernière entrée.
Récemment, j'ai résolu un problème lié à la perte de références d'éléments dans une boucle et j'ai finalement trouvé une solution que j'aimerais partager avec vous tous.
Voici une version simplifiée du code initial :
const someElements = await page.$$("xpath/ .//foo[@name='hoge']"); for (let i=0; i < someElements.length; i++) { await Promise.all([ someElements[i].click(), page.waitForNavigation({ waitUntil: ["load", 'networkidle0'] }), /* There are particular processes and going back process */ ]); };
Après la première itération de la boucle, le script n'a pas pu localiser les éléments du bouton. J'obtenais toujours l'erreur suivante : J'ai résolu ce problème en déclarant à nouveau la liste des éléments du bouton dans la boucle. J'ai ajouté une ligne de re-déclaration parce que je supposais que la référence originale someElements se perdait en s'éloignant de la page initiale. Après ce changement, l'erreur a été résolue. Cependant, je ne suis pas sûr que cette approche adhère strictement aux meilleures pratiques de codage. Si vous rencontrez un problème avec .click() dans une boucle lors de la navigation entre les pages, pensez à re-déclarer l'élément dans la boucle elle-même. Ce simple changement pourrait vous faire gagner beaucoup de temps de dépannage ! Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!
ProtocolError : erreur de protocole (DOM.describeNode) : impossible de trouver le contexte avec l'identifiant spécifié dans
Comment je l'ai résolu
Voici le code modifié :
const someElements1 = await page.$$("xpath/ .//foo[@name='hoge']");
for (let i=0; i < someElements.length; i++) {
const someElements2 = await page.$$("xpath/ .//foo[@name='hoge']"); // added row
await Promise.all([
someElements2[i].click(),
page.waitForNavigation({ waitUntil: ["load", 'networkidle0'] }),
/* There are particular processes and going back process */
]);
};