인프런 커뮤니티 질문&답변

양신희님의 프로필 이미지

작성한 질문수

파이썬 셀레니움 고급편 (python selenium - 크롤링, 크롤러)

move_to_bottom 스크롤 부분

24.05.22 22:38 작성

·

126

0

scroll_by_amount로 바뀌면서 시작하는 위치를 설정할 수 없게 된 것 같은데, 만약 인피니티 스크롤 하려고 할 때, 해당 마우스 포인터가 특정한 섹션에 있어야지 인피티니 스크롤을 할 수 있는 페이지라면 어떻게 설정을 해야될까요?

 

따로 sx, sy와 같이 해당 부분을 고정시키는 방법은 없을까요?

답변 2

1

인프런 AI 인턴님의 프로필 이미지

2024. 05. 24. 22:41

안녕하세요, 인프런 AI 인턴입니다.

제공해주신 내용과는 별개의 정보이나, scroll_by_amount 메소드와 관련하여 질문하신 내용에 대한 대안 방법을 제안드립니다. 인피니티 스크롤이 특정 섹션에 마우스 포인터가 위치해야 하는 경우에는 ActionChains 클래스를 사용하여 마우스를 특정 위치로 이동시키는 방법을 고려할 수 있습니다. 예를 들어, move_to_element 또는 move_by_offset 메소드를 활용하여 마우스 커서를 해당 섹션으로 먼저 이동시킨 후 scroll_by_amount를 수행하면 원하는 기능을 구현할 수 있습니다.

  1. 특정 요소로 마우스를 이동시키는 경우:
from selenium.webdriver.common.action_chains import ActionChains

# 특정 요소를 대상으로 ActionChains를 생성합니다.
element_to_scroll = driver.find_element(...)  # 스크롤해야 하는 특정 요소를 찾습니다.
ActionChains(driver).move_to_element(element_to_scroll).perform()

# 이동한 후에 스크롤을 수행합니다.
ActionChains(driver).scroll_by_amount(0, randY).perform()
  1. 특정 좌표로 마우스를 이동시키는 경우:
from selenium.webdriver.common.action_chains import ActionChains

# 상대적 좌표 (sx, sy)로 마우스를 이동시킵니다.
ActionChains(driver).move_by_offset(sx, sy).perform()

# 이동한 후에 스크롤을 수행합니다.
ActionChains(driver).scroll_by_amount(0, randY).perform()

이렇게 move_to_element 또는 move_by_offset 메소드를 사용하여 특정 위치로 마우스를 이동시킨 후 스크롤을 진행하므로써, 원하는 섹션에서 인피니티 스크롤을 진행할 수 있습니다. 이 방법을 통해 원하시는 기능 구현에 도움이 되었으면 합니다.

0

김지유님의 프로필 이미지
김지유
지식공유자

2024. 06. 16. 21:35

selenium actions_api scroll이 아닌, mouse api를 활용하시면 됩니다

 

특정 Element에서 offset만큼 움직일 수 있습니다

 

mouse_tracker = driver.find_element(By.ID, "mouse-tracker")
ActionChains(driver)
        .move_to_element_with_offset(mouse_tracker, 8, 0)
        .perform()

 

마우스 포인터를 움직이고 난 이후에

마우스 스크롤을 내려주면 됩니다

 

ActionChains(driver).scroll_by_amount(0, randY).perform()

 

Selenium mouse cursor move 방법

mouse_tracker = driver.find_element(By.ID, "mouse-tracker")
ActionChains(driver)
        .move_to_element_with_offset(mouse_tracker, 8, 0)
        .perform()
ActionChains(driver).scroll_by_amount(0, randY).perform()

 

[참고링크]
https://www.selenium.dev/documentation/webdriver/actions_api/mouse/