首页 > 解决方案 > 我正在尝试使用 Python 和 Selenium 拖放多个 jQuery 列表元素

问题描述

我正在尝试使用 Python 和 Selenium 拖放多个元素。

我有一个<li>元素<ul>,我需要在另一个元素下移动<li>...

第一步效果很好,但是接下来的动作出现了一些魔力,我想更改网页中项目的顺序。

这是我的python代码

from selenium import webdriver
from selenium.webdriver import ActionChains


driver = webdriver.Chrome()
driver.get("https://jqueryui.com/sortable/")

print(driver.title)
move = ActionChains(driver)
driver.switch_to.frame(driver.find_element_by_tag_name("iframe"))

item1= driver.find_element_by_xpath("//ul[@id='sortable']/li[text()='Item 3']")
before_y = item1.location.get('y')
item_height = item1.size.get('height')
move.drag_and_drop_by_offset(item1,0,item_height+10).perform()

item2= driver.find_element_by_xpath("//ul[@id='sortable']/li[text()='Item 1']")
before_y = item2.location.get('y')
item_height = item2.size.get('height')
move.drag_and_drop_by_offset(item2,0,item_height+10).perform()

item1= driver.find_element_by_xpath("//ul[@id='sortable']/li[text()='Item 3']")
before_y = item1.location.get('y')
item_height = item1.size.get('height')
move.drag_and_drop_by_offset(item1,0,item_height+10).perform()

我的最终目标是将这些项目排序为 [2,3,1,5,6,4,7]或任何其他顺序

标签: pythonseleniumselenium-webdriverselenium-chromedriverjquery-ui-draggable

解决方案


基于这个答案 - https://stackoverflow.com/a/40171414/16452840最后申请.perform就足够了。它只拖了Element一次。

item1= driver.find_element_by_xpath("//ul[@id='sortable']/li[text()='Item 3']")
before1 = item1.location.get('y')
item_height = item1.size.get('height')
move.drag_and_drop_by_offset(item1,item_height,item_height+10)
time.sleep(5)

item2= driver.find_element_by_xpath("//ul[@id='sortable']/li[text()='Item 1']")
before2 = item2.location.get('y')
item_height = item2.size.get('height')
move.drag_and_drop_by_offset(item2,0,item_height+10)
time.sleep(5)

item1= driver.find_element_by_xpath("//ul[@id='sortable']/li[text()='Item 3']")
before_y = item1.location.get('y')
item_height = item1.size.get('height')
move.drag_and_drop_by_offset(item1,0,item_height+10).perform()

推荐阅读