programing

웹 드라이버를 사용하여 요소로 스크롤하시겠습니까?

telebox 2023. 5. 27. 10:38
반응형

웹 드라이버를 사용하여 요소로 스크롤하시겠습니까?

저는 여전히 배우고 있으며 제 질문 중 하나에 대한 답변으로, 여기서 문제의 요소가 보이지 않기 때문에 그럴 수도 있다는 말을 들었습니다.

설명서를 살펴보니, 여기에 가장 적절한 답변이 있었습니다.

"org.openqa.selenium"을 사용할 수 있습니다.상호 작용요소로 이동할 작업" 클래스:

WebElement element = driver.findElement(By.id("my-id"));
Actions actions = new Actions(driver);
actions.moveToElement(element);
## actions.click();
actions.perform();

위를 사용하여 요소로 스크롤하려고 할 때:WebElement가 정의되지 않았다고 표시됩니다.

제가 관련 모듈을 수입하지 않았기 때문인 것 같습니다.누가 제가 무엇을 수입해야 하는지 알려주실 수 있나요?

편집: 렉시가 지적했듯이, 이것은 자바 코드였습니다.

하지만 그 사이 얼마 동안 그것을 알아내려고 노력한 직후.WebElement의 가져오기 방법을 찾았습니다.

from selenium.webdriver.remote.webelement import WebElement

나 같은 사람을 도울 수도 있습니다.

그 방법은 또한 좋은 교훈입니다, IMO:

이동한 곳: Documentation The

class selenium.webdriver.remote.webelement.WebElement(parent, id_, w3c=False)

위에 언급된 명령 형식으로 구분해야 합니다.

파이썬으로 자바 코드를 실행하려고 합니다.Python/Selenium에서는org.openqa.selenium.interactions.Actions클래스에 반영됩니다.

from selenium.webdriver.common.action_chains import ActionChains

element = driver.find_element_by_id("my-id")

actions = ActionChains(driver)
actions.move_to_element(element).perform()

또는 다음을 통해 "보기로 스크롤"할 수도 있습니다.

driver.execute_script("arguments[0].scrollIntoView();", element)

차이에 관심이 있는 경우:

그것은 질문에 대한 직접적인 대답이 아닙니다.Actions), 그러나 필요한 요소로 쉽게 스크롤할 수도 있습니다.

element = driver.find_element_by_id('some_id')
element.location_once_scrolled_into_view

이것은 실제로 당신의 좌표를 반환하기 위한 것입니다.x,y페이지의 요소이지만 오른쪽 아래로 스크롤하여 대상 요소로 이동할 수도 마찬가지입니다.

에 더하여move_to_element()그리고.scrollIntoView()뷰에서 요소의 중심을 맞추려고 시도하는 다음 코드를 제안하려고 했습니다.

desired_y = (element.size['height'] / 2) + element.location['y']
window_h = driver.execute_script('return window.innerHeight')
window_y = driver.execute_script('return window.pageYOffset')
current_y = (window_h / 2) + window_y
scroll_y_by = desired_y - current_y

driver.execute_script("window.scrollBy(0, arguments[0]);", scroll_y_by)

예:

driver.execute_script("arguments[0].scrollIntoView();", driver.find_element_by_css_selector(.your_css_selector))

이것은 어떤 유형의 선택기에서도 항상 사용할 수 있습니다.Actions 클래스도 있지만 이 경우에는 신뢰할 수 없습니다.

이것은 driver.execute_script():-를 사용하여 수행할 수 있습니다.

driver.execute_script("document.getElementById('myelementid').scrollIntoView();")

요소에 속성이 있는 경우 페이지를 필수 요소로 스크롤하는 다른 옵션이 있습니다.

페이지로 이동하고 아래로 스크롤하여 다음을 사용합니다.@id다음을 추가하여 자동으로 수행할 수 있습니다.#element_idURL로...

Selenium Waits 설명서로 이동한 후 페이지를 "암묵적 대기" 섹션으로 스크롤해야 한다고 가정해 보겠습니다.할 수 있습니다

driver.get('https://selenium-python.readthedocs.io/waits.html')

스크롤을 위한 코드를 추가합니다...OR 사용

driver.get('https://selenium-python.readthedocs.io/waits.html#implicit-waits')

스크롤 하여 요소로 합니다.id="implicit-waits"(<div class="section" id="implicit-waits">...</div>)

수 .execute_javascript를 들어 로봇과 같습니다.예를 들어 로봇 프레임워크의 셀레늄 라이브러리를 사용하여 수행하는 방법은 다음과 같습니다.

web_element = self.selib.find_element(locator)
self.selib.execute_javascript(
    "ARGUMENTS",
    web_element,
    "JAVASCRIPT",
    'arguments[0].scrollIntoView({behavior: "instant", block: "start", inline: "start"});'
)

언급URL : https://stackoverflow.com/questions/41744368/scrolling-to-element-using-webdriver

반응형