본문으로 바로가기

파일의 IT 블로그

  1. Home
  2. 프로그래밍/Python
  3. [Python] Selenium 스크롤 클릭해서 수동으로 내리기

[Python] Selenium 스크롤 클릭해서 수동으로 내리기

· 댓글개 · KRFile

Selenium으로 아버지 업무 자동화를 도와드리면서 저기 위 사이트 레이아웃 처럼 되있는 곳의 내부 스크롤(Inner Scroll) 을 내려야 하는 상황이 생겼습니다.

 

저 내부 스크롤을 내리면 스크롤 왼쪽에 보이는 표가 동적으로 로딩되면서 보여지는데 저 스크롤을 살짝식 내리면서 동적 테이블(Dynamic Table) 의 요소를 로딩하고 데이터를 가져오는게 목표였습니다.

 

그런데 보통 Selenium에서 스크롤을 내리는 방법을 할때 직접 클릭하는 방법을 사용하는게 아니라 JS를 직접 execute시켜서 내리는 방법이 대부분입니다.

 

이게 가장 좋은 방법이기도 하구요. 그런데 문제는 지금 제 Selenium 환경이 사이트 특성상 IE Driver을 사용하고 있고 자바스크립트로 내리면 화면은 내려가는데 JS로 스크롤을 내리니 스크롤을 제대로 내리는 판정이 안되는지 표 데이터가 로딩되지 않더군요..

 

Stack Over Flow, 인터넷에 온갖글을 참고해봤으나 결국 방법은 하나라는걸 알게됩니다.

사람이 내리듯이 클릭해서 수동으로 내리는 방법이요.

 

인터넷에 제가 딱 찾을만한 예제는 하나도 없었습니다. 그래도 클릭을 수행해주는 Action Chain 이란게 Selenium 모듈에 존재하더군요.

 

이걸 참고해서 직접 스크롤 내리는걸 만들어봤습니다.

 

def hand_scroll(amount):
    try:
        scroll = driver.find_element_by_css_selector('#스크롤바ID')

        # ActionChains생성
        action = ActionChains(driver)

        # 클릭하고 잡기
        action.click_and_hold(scroll).perform()

        # 마우스 내리기

        action.move_by_offset(0, amount).perform()

        # 마우스 놓아주기
        action.release(scroll).perform()
    except:  # 끝 도달시
        return False

 

위 함수를 이용해 hand_scroll(N) 을 입력해주면 Y좌표에서 N만큼 스크롤바를 수동으로 내립니다.

그런데 클릭하고 잡고 마우스를 놓아줄때 스크롤이 스프링 튕기듯 내리고 살짝 다시 올라가버리는 문제가 있더군요

 

Selenium 에서 스크롤 좌표를 잡을때 문제던가, IE Driver 가 더럽게 느려서 놓아주는 반응이 느리다거나 둘중에 하나인거같은데 어쨌든 저 위방법대로 하면 직접 사람이 내리는것과 동일한 방법이기 때문에 내부의 Dynamic Table이 잘 로딩됩니다.

SNS 공유하기
💬 댓글 개
이모티콘창 닫기
울음
안녕
감사해요
당황
피폐

이모티콘을 클릭하면 댓글창에 입력됩니다.