"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > DaysOfCode의 날

DaysOfCode의 날

2024년 10월 31일에 게시됨
검색:867

Day of DaysOfCode

여기요! 마지막 글 이후 오랜 시간이 흘렀습니다.
최근 저는 루프 내에서 요소 참조 손실과 관련된 문제를 해결해 왔으며 마침내 여러분 모두와 공유하고 싶은 해결책을 찾았습니다.

내가 이루고 싶었던 것

  • 특정 웹페이지의 버튼 요소를 수집합니다.
  • 각 버튼을 클릭하면 다른 페이지로 이동합니다.
  • 새 페이지에서 특정 작업을 수행한 후 첫 번째 페이지로 돌아갑니다.
  • 모든 버튼을 클릭할 때까지 2단계와 3단계를 반복합니다.

초기 코드의 단순화된 버전은 다음과 같습니다.

const someElements = await page.$$("xpath/ .//foo[@name='hoge']");

for (let i=0; i 



어떤 오류가 발생했나요?

forst 루프 반복 후 스크립트가 버튼 요소를 찾을 수 없었습니다. 다음 오류가 계속 발생했습니다.
ProtocolError: 프로토콜 오류(DOM.describeNode):

에서 지정된 ID를 가진 컨텍스트를 찾을 수 없습니다.

내가 해결한 방법

루프 내에서 버튼 요소 목록을 다시 선언하여 이 문제를 해결했습니다.
수정된 코드는 다음과 같습니다.

const someElements1 = await page.$$("xpath/ .//foo[@name='hoge']");

for (let i=0; i 



초기 페이지에서 다른 곳으로 이동할 때 원래 someElements 참조가 손실된다고 가정했기 때문에 재선언 줄을 추가했습니다. 변경 후 오류가 해결되었습니다. 그러나 이 접근 방식이 최고의 코딩 방법을 엄격하게 준수하는지 확실하지 않습니다.

페이지 간을 탐색할 때 루프에서 .click() 문제가 발생하는 경우 루프 자체 내에서 요소를 다시 선언하는 것이 좋습니다. 이 간단한 변경으로 문제 해결 시간을 많이 절약할 수 있습니다!

릴리스 선언문 이 글은 https://dev.to/koichiarai/day-23-of-100daysofcode-2opg?1에서 복제됩니다.1 침해 내용이 있는 경우, [email protected]으로 연락하여 삭제하시기 바랍니다.
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3