우분투의 Raspberry PI에있는 Puppeteer에서 "평가 실패 : TypeError : null의 'textContent'속성을 읽을 수 없습니다."라는 메시지가 표시됩니다.

앤드류 클로스

이 코드는 매번 로컬에서 올바르게 실행됩니다. 그러나 서버에 배포 할 때 (크롬 브라우저를 사용하는 Raspberry Pi의 우분투) 가끔 3/10 시도 정도에 오류가 발생합니다. 이 코드는 가장 잘 작동합니다 ...

await page.goto('http://mywebsite.com')
const element = await page.$('div[class="user-tags"]')
const value = await page.evaluate(el => el.textContent, element)

그러나 때때로 반환됩니다 ... "경험 수준 오류 가져 오기 오류 : 평가 실패 : TypeError : null의 'textContent'속성을 읽을 수 없습니다."

그래서 나는 해결책을 찾고 이것을 시도했지만 매번 실패합니다 (두 코드 블록 모두 로컬에서 잘 실행됩니다) ...

 await page.goto('http://mywebsite.com')
 await page.waitForSelector('div[class="user-tags"]')
 const element = await page.$('div[class="user-tags"]')
 const value = await page.evaluate(el => el.textContent, element)

"경험 수준을 얻는 동안 오류 발생 오류 :"div [class = "user-tags"] "선택기 대기 중 실패 : 시간 초과 30000ms가 2020 년 9 월 10 일 @ 06:02:35를 초과했습니다."

제안 해 주셔서 감사합니다!

Vaviloff

첫 번째와 두 번째 코드 스 니펫의 차이점

두 번째 코드 샘플에서는 puppeteer에게 div[class="user-tags"]대상 페이지에 존재할 때까지 기다리도록 지시 합니다.

await page.waitForSelector('div[class="user-tags"]')

이것이 요소에서 데이터를 가져 오는 올바른 방법입니다. 먼저 사용할 수 있는지 확인한 다음 쿼리합니다.

시간 초과 오류는 주어진 요소가 30 초 이내에 발견되지 않기 때문에 발생합니다 (기본 시간 초과 임).

이 문제를 해결하는 방법

먼저 인형을 조종하는 사람이 요소를 찾지 못하는 이유를 파악해야합니다.

  • 아마도 div.user-tags모든 페이지에 있어야하는 것은 아닐까요?
  • Raspberry Pi가 30 초 안에 대상 페이지를로드하고 처리 할만큼 강력하지 않을 수도 있습니다. - 타임 아웃늘릴 수 있습니다 .
  • 페이지가 완전히 로드 될 때까지 기다릴 수도 있습니다 . 이렇게하면 puppeteer는 스크립트를 진행하기 전에 모든 리소스가로드되었는지 확인합니다.
await page.goto(url, { waitUntil: 'networkidle0' })

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관