selenium+python:스크롤 작업

selenium은 모든 작업을 수행할 수 있는 만능 도구가 아닙니다. 페이지上的 요소가 화면을 넘어서면 화면 아래의 요소를 작업하려면 스크롤을 사용해야 합니다. 이때는 직접 요소를 찾을 수 없어 "요소가看不见" 에러가 발생합니다.

이러한 문제를 해결하기 위해 스크롤 바를 수동으로 이동시켜 작업할 요소를 화면에 보이게 해야 합니다. 그러나 selenium은 직접 스크롤 바를 제어할 수 있는 명령어가 없습니다. 다행히도 selenium은 execute_script() 메소드를 통해 JavaScript 코드를 실행할 수 있습니다.

방법 1: JavaScript로 직접 제어

# 화면 최상단으로 이동
def scroll_top(self):
    if self.driver.name == "Chrome":
        js = "var q=document.body.scrollTop=0"
    else:
        js = "var q=document.documentElement.scrollTop=0"
    return self.driver.execute_script(js)

# 화면 최하단으로 이동
def scroll_foot(self):
    if self.driver.name == "Chrome":
        js = "var q=document.body.scrollTop=1000"
    else:
        js = "var q=document.documentElement.scrollTop=1000"
    return self.driver.execute_script(js)

또는:

js="var q=document.getElementById('***').scrollTop=10000"
driver.execute_script(js)

여기서 '***'는 스크롤바의 id입니다. 그러나 JavaScript에는 xpath와 같은 방법이 없기 때문에 id가 없는 페이지에서는 이 방법이 적용되지 않습니다.

위의 코드는 상하 방향 스크롤을 설명했습니다. 이제 좌우 방향 스크롤 방법을 알아보겠습니다.

방법 2: window.scrollTo() 사용

#좌우 방향 스크롤 예제
js="window.scrollTo(200,1000)"
driver.execute_script(js)

방법 3: 지정위치로 스크롤

target = driver.find_element_by_id("***")
driver.execute_script("arguments[0].scrollIntoView();", target) #지정 요소로 스크롤

이 방법은 특정 요소를 화면에 보이게 할 때 유용합니다.

방법 4: scrollTo 함수 사용

#화면底部로 이동
js = "window.scrollTo(0,document.body.scrollHeight)"
driver.execute_script(js)

#화면顶部로 이동
js = "window.scrollTo(0,0)"
driver.execute_script(js)

추가 정보: robotframework에서 selenium2library는 요소를 자동으로 초점 맞추는 focus 기능이 있습니다.

예제 코드:

driver.find_element_by_xpath("//div[@id='search']/div/span/input").click()
target = driver.find_element_by_id("_easyui_tree_17")
driver.execute_script("arguments[0].scrollIntoView();", target) #요소로 스크롤
driver.find_element_by_xpath("//span[@class='tree-title'][text()='专业测试.修改后/123456']").click()

이 코드는 방법 2와 유사하며, 툴이 요소 제어를 위한 패키지로 간편화시켜줍니다.

참고 링크: 참고 링크 1 참고 링크 2

태그: selenium python JavaScript Web Automation

7월 15일 17:43에 게시됨