Maison  >  Article  >  interface Web  >  Jour des jours de code

Jour des jours de code

Patricia Arquette
Patricia Arquetteoriginal
2024-10-04 06:19:02303parcourir

Day of DaysOfCode

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.

Ce que je voulais réaliser

  • Collectez les éléments des boutons sur une page Web spécifique.
  • Cliquez sur chaque bouton pour accéder à une autre page.
  • Après avoir effectué certaines actions sur la nouvelle page, revenez à la première page.
  • Répétez les étapes 2 et 3 jusqu'à ce que tous les boutons aient été cliqués.

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 */
    ]);
};

Quelle erreur j'ai rencontrée

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 :
ProtocolError : erreur de protocole (DOM.describeNode) : impossible de trouver le contexte avec l'identifiant spécifié dans

Comment je l'ai résolu

J'ai résolu ce problème en déclarant à nouveau la liste des éléments du bouton dans la boucle.
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 */
    ]);
};

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn