Heim > Web-Frontend > js-Tutorial > Hauptteil

Tag von DaysOfCode

Patricia Arquette
Freigeben: 2024-10-04 06:19:02
Original
302 Leute haben es durchsucht

Day of DaysOfCode

Hey! Der letzte Eintrag ist schon eine Weile her.
Kürzlich habe ich mich mit einem Problem beschäftigt, das mit dem Verlust von Elementverweisen innerhalb einer Schleife zusammenhängt, und habe endlich eine Lösung gefunden, die ich gerne mit Ihnen allen teilen möchte.

Was ich erreichen wollte

  • Schaltflächenelemente auf einer bestimmten Webseite sammeln.
  • Klicken Sie auf die einzelnen Schaltflächen, um zu einer anderen Seite zu navigieren.
  • Nachdem Sie bestimmte Aktionen auf der neuen Seite ausgeführt haben, kehren Sie zur ersten Seite zurück.
  • Wiederholen Sie die Schritte 2 und 3, bis alle Schaltflächen angeklickt wurden.

Hier ist eine vereinfachte Version des ursprünglichen Codes:

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 */
    ]);
};
Nach dem Login kopieren

Welcher Fehler ist mir aufgefallen?

Nach der forst-Schleifeniteration konnte das Skript die Schaltflächenelemente nicht finden. Ich bekam immer wieder folgende Fehlermeldung:
ProtocolError: Protokollfehler (DOM.describeNode): Kontext mit der angegebenen ID unter kann nicht gefunden werden

Wie ich es gelöst habe

Ich habe dieses Problem gelöst, indem ich die Liste der Schaltflächenelemente innerhalb der Schleife neu deklariert habe.
Hier ist der geänderte Code:

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 */
    ]);
};
Nach dem Login kopieren

Ich habe eine Neudeklarationszeile hinzugefügt, weil ich davon ausgegangen bin, dass die ursprüngliche someElements-Referenz verloren geht, wenn man von der Startseite weg navigiert. Nach dieser Änderung wurde der Fehler behoben. Ich bin mir jedoch nicht sicher, ob dieser Ansatz strikt den besten Codierungspraktiken entspricht.

Wenn Sie beim Navigieren zwischen Seiten in einer Schleife auf ein Problem mit .click() stoßen, sollten Sie erwägen, das Element innerhalb der Schleife selbst neu zu deklarieren. Diese einfache Änderung kann Ihnen viel Zeit bei der Fehlerbehebung ersparen!

Das obige ist der detaillierte Inhalt vonTag von DaysOfCode. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:dev.to
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage