Захват курсора при использовании drag_and_drop_by_offset (Python/Selenium)

Мне нужно перетащить эту шкалу Захват курсора при использовании drag_and_drop_by_offset (Python/Selenium), и когда я запускаю этот код:

HandScale = browser.find_element_by_xpath('//*[@data-xform = "scale"]')
GridLineX = browser.find_element_by_class_name('outlined')
bottomLeft = browser.find_element_by_class_name('bottomLeft')
print GridLineX.size
action_chains = ActionChains(browser)
action_chains.drag_and_drop_by_offset(HandScale, 30, 30).click_and_hold(HandScale).perform()

Он по-прежнему имеет эффект захвата, показанный здесь: Захват курсора при использовании drag_and_drop_by_offset (Python/Selenium)

Есть ли способ удалить этот эффект перед запуском другой части моего скрипта?

Итак, ваш вопрос заключается в том, как освободить или «отбросить» страницу после ее захвата?

Reedinationer 14.03.2019 22:42

Будет ли работать action_chains.release()?

Nic Laforge 14.03.2019 23:33

Спасибо чувак! Я попробую, когда у меня будет возможность, я дам вам знать.

Ali Al-Jabur 15.03.2019 02:15

Это все еще не сработало, какие-нибудь другие идеи?

Ali Al-Jabur 16.03.2019 19:47
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
3
4
812
1

Ответы 1

Я думаю, вам просто нужна функция release() в action_chains, которая предназначена именно для этого. Строка, которую нужно добавить в конец вашего текущего файла, будет следующей:

action_chains.release().perform()

Изменить после отзыва о том, что это не сработало:, что, если вы сделаете release() внутри вашего существующего action_chains и просто добавите pause() после вашего click_and_hold(HandScale), чтобы щелчок фактически удерживался, а не сразу отпускался. Наконец, поскольку вы используете аргумент веб-элемента в click_and_hold(HandScale), я бы попытался освободить этот элемент с помощью release(HandScale). Итак, ваш action_chains может делать то, что вы хотите, если вы используете следующее:

 action_chains.drag_and_drop_by_offset(HandScale, 30, 30).click_and_hold(HandScale).pause(5).release(HandScale).perform()

Если ЭТО не работает, в WebDriver API есть метод под названием reset_actions(), который, согласно документации, «Очищает действия, которые уже сохранены локально и на удаленном конце». Я бы добавил это под вашим текущим action_chains, но вы можете попробовать вставить его перед perform() в свой текущий код. Строка для добавления будет выглядеть так:

action_chains.reset_actions().perform()

Если ничего из этого не работает для вас, вы можете попробовать

driver.execute_script("arguments[0].removeAttribute('cursor')", element")

Если вам нужно, я думаю, что могу помочь вам понять, что выполнять, если ничего из вышеперечисленного не работает.

Хорошо, я попробую, когда у меня будет возможность, большое спасибо.

Ali Al-Jabur 15.03.2019 22:07

Когда вы говорите, что это не сработало, вы имеете в виду, что элемент все еще имеет cursor: grabbing в этом div?

C. Peck 16.03.2019 20:39

@AliAl-Jabur Взгляните на изменения, которые я внес в свой ответ, и посмотрите, сможете ли вы отпустить мышь. Дайте мне знать, как это происходит!

C. Peck 16.03.2019 22:41

Хорошо, спасибо большое, чувак, я посмотрю, когда у меня будет время, это много значит.

Ali Al-Jabur 18.03.2019 00:33

Эй, чувак, ни один из них не сработал, можешь помочь мне с excute_script.

Ali Al-Jabur 19.03.2019 21:34

да, есть ли способ, которым я могу остановить захват

Ali Al-Jabur 20.03.2019 12:26

Я посмотрю, смогу ли я разобраться в Javascript в ближайшее время. Я ненавижу проклятые цепочки действий, они никогда не работают правильно!

C. Peck 20.03.2019 16:45

Попробуйте использовать driver.execute_script("arguments[0].removeAttribute('cursor'‌​), element") — я редактирую это в своем ответе — после вашего action_chains. Если это не сработает, я буду озадачен.

C. Peck 20.03.2019 17:05

я попробую, но не могли бы вы объяснить, что такое элемент?{nvm}

Ali Al-Jabur 20.03.2019 20:34
element будет div с атрибутом cursor = 'grabbing'. Я что-нибудь отредактирую, я думать найду это в вопросе. Также заметил, что вы используете browser, а не driver, поэтому я это изменю.
C. Peck 21.03.2019 18:11

@AliAl-Jabur ЖДАТЬ .... cursor: grabbing не является атрибутом сам по себе, это часть атрибута style этого div, который вы выделили. Проблема в том, что я не вижу всего — часть после display: за кадром. Не могли бы вы отредактировать в своем вопросе полный текст этого div и, в частности, атрибут input?

C. Peck 21.03.2019 18:30

Другие вопросы по теме