Мне нужно перетащить эту шкалу
, и когда я запускаю этот код:
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()
Он по-прежнему имеет эффект захвата, показанный здесь:

Есть ли способ удалить этот эффект перед запуском другой части моего скрипта?
Будет ли работать action_chains.release()?
Спасибо чувак! Я попробую, когда у меня будет возможность, я дам вам знать.
Это все еще не сработало, какие-нибудь другие идеи?






Я думаю, вам просто нужна функция 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")
Если вам нужно, я думаю, что могу помочь вам понять, что выполнять, если ничего из вышеперечисленного не работает.
Хорошо, я попробую, когда у меня будет возможность, большое спасибо.
Когда вы говорите, что это не сработало, вы имеете в виду, что элемент все еще имеет cursor: grabbing в этом div?
@AliAl-Jabur Взгляните на изменения, которые я внес в свой ответ, и посмотрите, сможете ли вы отпустить мышь. Дайте мне знать, как это происходит!
Хорошо, спасибо большое, чувак, я посмотрю, когда у меня будет время, это много значит.
Эй, чувак, ни один из них не сработал, можешь помочь мне с excute_script.
да, есть ли способ, которым я могу остановить захват
Я посмотрю, смогу ли я разобраться в Javascript в ближайшее время. Я ненавижу проклятые цепочки действий, они никогда не работают правильно!
Попробуйте использовать driver.execute_script("arguments[0].removeAttribute('cursor'), element") — я редактирую это в своем ответе — после вашего action_chains. Если это не сработает, я буду озадачен.
я попробую, но не могли бы вы объяснить, что такое элемент?{nvm}
element будет div с атрибутом cursor = 'grabbing'. Я что-нибудь отредактирую, я думать найду это в вопросе. Также заметил, что вы используете browser, а не driver, поэтому я это изменю.
@AliAl-Jabur ЖДАТЬ .... cursor: grabbing не является атрибутом сам по себе, это часть атрибута style этого div, который вы выделили. Проблема в том, что я не вижу всего — часть после display: за кадром. Не могли бы вы отредактировать в своем вопросе полный текст этого div и, в частности, атрибут input?
Итак, ваш вопрос заключается в том, как освободить или «отбросить» страницу после ее захвата?