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.
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 der forst-Schleifeniteration konnte das Skript die Schaltflächenelemente nicht finden. Ich bekam immer wieder folgende Fehlermeldung: Ich habe dieses Problem gelöst, indem ich die Liste der Schaltflächenelemente innerhalb der Schleife neu deklariert habe. 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!
ProtocolError: Protokollfehler (DOM.describeNode): Kontext mit der angegebenen ID unter
Wie ich es gelöst 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 */
]);
};