안녕하세요! 오랫만에 글이네요.
최근 저는 루프 내에서 요소 참조 손실과 관련된 문제를 해결해 왔으며 마침내 여러분 모두와 공유하고 싶은 해결책을 찾았습니다.
초기 코드의 단순화된 버전은 다음과 같습니다.
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 */ ]); };
forst 루프 반복 후 스크립트가 버튼 요소를 찾을 수 없었습니다. 다음 오류가 계속 발생했습니다. 루프 내에서 버튼 요소 목록을 다시 선언하여 이 문제를 해결했습니다. 초기 페이지에서 다른 곳으로 이동할 때 원래 someElements 참조가 손실된다고 가정했기 때문에 재선언 줄을 추가했습니다. 변경 후 오류가 해결되었습니다. 그러나 이 접근 방식이 최고의 코딩 방법을 엄격하게 준수하는지 잘 모르겠습니다. 페이지 간을 탐색할 때 루프에서 .click() 문제가 발생하는 경우 루프 자체 내에서 요소를 다시 선언하는 것이 좋습니다. 이 간단한 변경으로 문제 해결 시간을 많이 절약할 수 있습니다! 위 내용은 DaysOfCode의 날의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!
ProtocolError: 프로토콜 오류(DOM.describeNode):
내가 해결한 방법
수정된 코드는 다음과 같습니다.
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 */
]);
};