3-3. Wait and Call

data_hamster·2023년 4월 20일
0

학습 주제
Selenium

학습 내용

요청을 하고 응답을 하는 과정에서 wait을 진행, call을 통해 특정 요소를 가져올 수 있음.

암묵적 기다림, 명시적 기다림이 있다.

  • Implicit Wait: 다 로딩이 될 때까지 지정한 시간 동안 기다림 (모든 웹 페이지 로딩이 될 때까지 5초동안 기다림)
  • Explicit Wait: 특정 요소에 대한 제약을 통한 기다림 (이 태그를 가져올 수 있을 때까지 기다림)
    이게 가능한 이유는 우리가 웹 브라우저를 제어하기 때문.

grid 바둑판 배열
class name이 특정하게 되면 스크래핑이 쉽게 됨. 이러다보니 웹 제작자들이 손쉽게 스크래핑 되는 것을 막기 위해, 이름을 랜덤화 됨.
이번 실습엔 구조를 중심으로 찾아갈 예정->Xpath 사용

이름을 랜덤화 하더라도, 위치는 변하지 않음. XPath -> Xml path,
우리도 웹 페이지에서 찾고자하는 요소를 데스크탑/폴더1/폴더2/음악.mp3 처럼 경로로 나타낼 수 있음.


찾는 위치를 검사하여, 그 위치에서 우클릭, Copy, Copy XPath 순으로 들어간다.

div[2]는 인덱스가 1부터 시작.
id="__next"

이번 웹페이지는 비동기 처리가 이뤄짐. 일단 응답해주고, 데이터를 채워나가는 식. 실제로도 웹 페이지가 뜨고 내용이 올라오는데 약간의 딜레이가 있는 것을 알 수 있음.

NoSuchElemnetException이라는 오류가 뜬다.
저번시간에 떴더 오류와 동일. 비동기 때문에 이런 오류가 뜸. get을 한 뒤에 바로 find_element를 하게 되면, 그런 요소가 뜨기도 전에 찾기를 하게되기 때문.


저번에 사용했던 Implicit Wait이다.


아까와는 달리 get과 find_element 사이에 driver.implicitly_wait(10)이 들어갔다. 이는 페이지가 완전히 로딩되거나(렌더링 종료), 10초를 다 기다린 후에 동작하겠다는 뜻이다.
항상 10초를 기다린다는 것은 아님.


명시적 기다림.

  • driver를 10초 동안 기다리겠다.
  • .until -> 내가 무언가 조건을 만족할 때까지.
  • EC expected_condition의 줄임.
  • "target"이라는 ID가 존재하는 요소가 존재할 때까지.
  • 기다린 후, 그 요소를 반환함.

    정상적으로 뜨는 것을 확인 할 수 있다. 주의할 점이 계속 'element'를 'elemnet'라고 오타를 낸다. 저번에도 그렇고 주의해야한다. 아까도 계속 고쳐서 됐다.


중간에 차이가 있음. grid의 요소 번째를 나타낸다.
변하는 부분과, 변하지 않는 부분을 구분해서 for 문 진행.


중간에 변할 부분을 format을 사용해서 적용. 얻은 값을 print로 확인하였다.

profile
반갑습니다 햄스터 좋아합니다

0개의 댓글