.move_by_offset() — перемещение мыши



action.move_by_offset(xoffset, yoffset) — используется для перемещения указателя мыши от текущего положения на определенное смещение по осям X и Y.

Как работает:

Текущее положение мыши: Selenium учитывает текущее положение указателя мыши на странице.

Смещение. Вы указываете, на сколько пикселей нужно сместить указатель мыши по горизонтали (ось X) и по вертикали (ось Y). Значения могут быть как положительными, так и отрицательными:

Положительное значение xoffset переместит указатель вправо.
Отрицательное значение -xoffset переместит указатель влево.
Положительное значение yoffset переместит указатель вниз.
Отрицательное значение -yoffset переместит указатель вверх.

Выполнение действия: После того как смещение задано, метод .perform() вызывается для выполнения действия.

Новое положение мыши. Указатель мыши перемещается на заданное смещение относительно его текущего положения.

Обычно этот метод используется совместно с методом click(), чтобы симулировать действия пользователя с мышью.

xoffset — расстояние по оси x,
yoffset — расстояние по оси y.

Пример на пальцах:

Представьте, что курсор мыши – это ваш палец, а экран компьютера – это стол. Вы кладете палец в центр стола. Теперь вы хотите переместить палец на 5 сантиметров вправо и на 3 сантиметра вниз.

actions.move_by_offset(5, 3).perform()

Здесь 5 – это смещение вправо, а 3 – смещение вниз. Метод .perform() говорит Selenium: «Хорошо, пора двигать палец (курсор)!»

И вот ваш палец (курсор) оказывается на новом месте стола (экрана).

Таким образом, .move_by_offset() позволяет вам «передвигать палец» по «столу» на определенное расстояние, что может быть полезно для имитации различных действий с мышью в веб-приложениях.

Код ниже демонстрирует использование Selenium для автоматизации взаимодействия с ползунком (slider) на веб-странице. Давайте разберем его построчно:

Пример кода:

import time
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.by import By

url = "https://mob25.com/"
with webdriver.Chrome() as driver:
    driver.get(url)
    slider = driver.find_element(By.ID, "volume")
    time.sleep(3)
    ActionChains(driver).click_and_hold(slider).move_by_offset(50, 0).release().perform()
    time.sleep(10)

Разберём основную строку:

ActionChains(driver).click_and_hold(slider).move_by_offset(50, 0).release().perform()

Создается объект ActionChains, инициализированный текущим экземпляром браузера.

click_and_hold(slider): Нажимает и удерживает левую кнопку мыши на элементе slider.

move_by_offset(50, 0): Перемещает мышь на 50 пикселей вправо от текущего положения. Поскольку второй параметр равен 0, вертикальное смещение отсутствует.

release(): Отпускает левую кнопку мыши.

perform(): Выполняет все запланированные действия.

В отличие от предыдущего примера кода, который осуществляет перемещение ползунка скачками на фиксированное количество пикселей, представленный ниже код реализует плавное передвижение ползунка на определённое смещение от его начального положения. Это может быть особенно полезно в ситуациях, когда требуется более точное и деликатное управление элементами интерфейса.

Например, при взаимодействии с капчей, которая требует от пользователя точного позиционирования ползунка для совмещения определённых элементов изображения, важно иметь возможность мелкого и точного управления ползунком. В таком случае, передвигая ползунок на определённое смещение относительно его начального положения, пользователь может добиться более высокой степени точности, что, в свою очередь, повышает шансы на успешное прохождение капчи.

from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
import time
from selenium.webdriver.common.by import By

# Использование контекстного менеджера для управления драйвером
with webdriver.Chrome() as driver:
    # Загрузите локальный HTML-файл
    driver.get('https://mob25.com/')
    slider = driver.find_element(By.ID,'volume')
    width = slider.size['width']

    # Вычислите смещение для 1 единицы
    offset = width / 100
    actions = ActionChains(driver)

    # Нажмите на ползунок и удерживайте кнопку мыши
    actions.click_and_hold(slider).perform()

    # В цикле перемещайте ползунок на 1 единицу
    for _ in range(10):  # пример для 10 шагов
        actions.move_by_offset(offset, 0).perform()
        time.sleep(0.1)  # пауза для наглядности

    # Отпустите кнопку мыши
    actions.release().perform()

Разберём основные моменты в коде подробнее:

Находим элемент ползунка по его идентификатору (‘volume’). Затем получается ширина этого элемента, которая будет использоваться для вычисления смещения при перемещении ползунка.

slider = driver.find_element(By.ID, 'volume')
width = slider.size['width']

Для каждого шага вычисляется смещение (1% от ширины ползунка)

# Вычислите смещение для 1 единицы
offset = width / 100

Выполняем нажатие и удержания кнопки мыши на элементе ползунка.

actions.click_and_hold(slider).perform()

В цикле ползунок перемещается на 10 шагов вправо. В качестве величины шага смещения используется offset, рассчитанный ранее.

Между шагами делается пауза в 0.1 секунду для наглядности.

for _ in range(10):  # пример для 10 шагов
    actions.move_by_offset(offset, 0).perform()
    time.sleep(0.1)  # пауза для наглядности

Отпускаем кнопку мыши, завершая действие перетаскивания.

actions.release().perform()


Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: