python/selenium

크롤링 자주 나는 오류

Balang 2023. 8. 24. 17:06
728x90

Crawling이란?

페이지 데이터를 추출하는 Scraping과 개념과 달리 페이지에 있는 링크를 따라

새 페이지로 연결되는 것과 새 페이지의 링크를 계속해서 찾아 다른 새 페이지로 연결되는 것을 의미 합니다.

 

웹 크롤러는 페이지의 모든 링크를 따라가며 새 페이지로 이동하고 크롤링 할 새 링크나 페이지가 더 이상

없을 때까지 해당 프로세스를 계속하는 소프트웨어 프로그램입니다.

 

웹크롤러는 로봇, 스파이더, 검색 엔진 봇 등 다양한 이름으로 알려져 있습니다.

봇이라고 불리는 이유는 할당된 작업이 있고, 링크에서 링크로 이동하며, 각 페이지의 정보를 캡쳐하기 때문입니다.

 

우리가 웹 페이지의 데이터를 수집할 때 python으로 하는 경우 BS4와 Selenium을 가장 많이 활용합니다.

 

오늘은 Selenium을 사용할 때 많이 나는 오류에 대해 알아보도록 하겠습니다.

 

1. 사이트 로딩 기다리는 필요성

우리가 사이트를 Crawling할 때 원하는 데이터 및 버튼이 존재하지 않을 수 있습니다.

Selenium은 기본적으로 사이트 로딩을 기다리는데 HTTP Response 및 Rendering을 기다립니다.

그렇기에 정상적으로 Crawling하기 위해서는 사이트의 로딩이 필요합니다. (Expected Condition)

 

Selenium 기다리는 함수들 (알아두면 정말 좋게 활용할 수 있습니다.)

title_is 
	=> 페이지 제목 확인에 대해 기다림
    
title_contains 
	=> 제목에 대소문자가를 구분하는 하위 문자열이 포함되어 있는지 확인
    
presence_of_element_located 
	=> 페이지의 DOM에 요소가 있는지 확인하기 위한 기다림
    
visibility_of_element_located → O
	=> 요소가 페이지의 DOM에 존재하고 표시되는지 확인하기 위한 기다림
    
visibility_of
	=> 페이지의 DOM에 존재하는 것을 알려진 요소가 표시되는지 확인하기 위한 기다림
    
presence_of_all_elements_located
	=> 웹페이지에 적어도 하나의 요소가 존재하는지 확인하기 위한 기다림
    
text_to_be_present_in_element → O
	=> 주어진 텍스트가 지정된 요소에 존재하는지 확인하기 위한 기다림
    
text_to_be_present_in_element_value
	=> 주어진 텍스트가 요소의 값에 존재하는지 확인하기 위한 기다림
    
frame_to_be_available_and_switch_to_it → O
	=> 주어진 프레임이 전환 가능한지 확인하기 위한 기다림

invisibility_of_element_located
	=> 요소가 DOM에 표시되지 않거나 존재하지 않는지 확인하기 위한 기다림
    
element_to_be_clickable
	=> 요소 확인에 대한 기대치가 표시되고 클릭할 수 있도록 활성화

staleness_of
	=> 요소가 더 이상 DOM에 연결되지 않을 때 까지 기다림

element_to_be_selected
	=> 선택을 확인하기 위한 기대가 선택

element_located_to_be_selected
	=> 위치할 요소에 대한 기대가 선택 

element_selection_state_to_be
	=> 주어진 요소가 선택되었는지 확인하기 위한 기대값

element_located_selection_state_to_be
	=> 요소를 찾고 지정된 선택 상태가 해당 상태인지 확인하기 위한 기대 값

alert_is_present
	=> 현재 alert이 있는지 확인하고 있을 경우 alert로 전환하기 위한 값

위 코드 말고도 다른 expected_conditions가 많이 있는데요

위에 제가 O 표시한 것은 제가 selenium을 하면서 많이 사용한 것들만 표시를 해놨습니다.

 

저도 회사에서 새로운 서비스를 만들었을 때 Selenium을 활용하여 UI Tesing을 진행한 적이 있는데

그때 강력하다고 생각을 했습니다.

 

다만 크롤링을 할 때 가장 주의해야할 점이 있습니다.

여러분들이 어떠한 웹에서 데이터를 추출할 때는 필수적으로 'robots.txt'를 확인하여

User-agent: *
Allow: /  -- 크롤링 가능

---------------------------
User-agent: *
Disallow: / -- 크롤링 불가

Allow인지 Disallow인지를 확인하고 진행하기를 바랍니다.

괜히 Disallow인데 법적문제까지 가면 너무 곤란해지는 상황이 오니 주의하여 크롤링하시기를 바랍니다.

 

그럼 오늘도 파이팅입니다!!

 

REFERENCE

 

selenium.webdriver.support.expected_conditions — Selenium 4.10 documentation

An expectation for checking that an element, known to be present on the DOM of a page, is visible. Visibility means that the element is not only displayed but also has a height and width that is greater than 0. element is the WebElement returns the (same)

www.selenium.dev

 

728x90
반응형