action.drag_and_drop_by_offset(element, xoffset, yoffset) — это метод класса ActionChains, который используется для перетаскивания элемента на определенное расстояние от его текущего положения. Вместо того чтобы указывать целевой элемент, как в методе .drag_and_drop(), вы указываете смещение по осям xoffset и yoffset, на которое элемент должен быть перемещен.
element — элемент, который нужно перетаскивать.x
offset — расстояние по оси X, на которое нужно переместить элемент.
yoffset — расстояние по оси Y, на которое нужно переместить элемент.
Как это работает:
Найти элемент для перетаскивания: Сначала Selenium должен найти element на веб-странице, который вы хотите перетащить. Это может быть сделано с помощью различных методов поиска, таких как find_element().
# Находим элемент, который будем перемещать element = driver.find_element(By.ID, "element-id")
Инициализация действий: После того как element найден, создается объект ActionChains, который используется для инициализации серии действий.
# Создаём экземпляр класса ActionChains actions = ActionChains(driver)
Выполнение перетаскивания: С помощью метода drag_and_drop_by_offset объекта ActionChains Selenium «берет» element, «перетаскивает» его на указанное смещение по осям xoffset и yoffset и «отпускает» его.
# Выполняем перетаскивание по смещению actions.drag_and_drop_by_offset(element, 200, 100).perform()
Завершение действия: После того как действие перетаскивания инициировано, его нужно выполнить с помощью метода perform.
Код ниже выполняет перетаскивания элемента с помощью .drag_and_drop_by_offset().
import time
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.by import By
with webdriver.Chrome() as driver:
driver.get("https://mob25.com/")
element_to_drag = driver.find_element(By.ID, "click_and_hold")
time.sleep(1)
# Создание объекта ActionChains, инициализация операции перетаскивания элемента на 500 пикселей вправо
# и выполнение цепочки действий
ActionChains(driver).drag_and_drop_by_offset(element_to_drag, 500, 0).release().perform()
time.sleep(10)
Описание работы кода:
На странице ищется элемент с ID click_and_hold.
element_to_drag = driver.find_element(By.ID, "click_and_hold")
Программа ожидает 1 секунду, чтобы все элементы страницы успели загрузиться.
Создается объект ActionChains, который инициирует операцию перетаскивания найденного элемента на 500 пикселей вправо от его текущего положения. Метод release() вызывается для отпускания элемента после перетаскивания. Метод perform() выполняет всю цепочку заданных действий.
ActionChains(driver).drag_and_drop_by_offset(element_to_drag, 500, 0).release().perform()
Программа ожидает 10 секунд перед автоматическим закрытием браузера, чтобы результаты действий были видны пользователю.