Python Selenium-双击拾取列表中的项目

Python Selenium-双击拾取列表中的项目,python,selenium,Python,Selenium,我正在尝试自动化我的web应用程序中的一些表单填写。我在表单中有一部分是多选列表,用户在其中双击左侧框(可用)中所需的选项,然后在双击时移动到右侧框(选中)中的框。看起来是这样的: 当我检查这些元素时,左侧的框如下所示: 我不知道如何使用Python在Selenium中复制此功能。我试图得到如下列表: driver.find_element_by_id("fframeworkpage:j_id28:sections_1:j_idd0:sections_23:j_idd164:sections

我正在尝试自动化我的web应用程序中的一些表单填写。我在表单中有一部分是多选列表,用户在其中双击左侧框(可用)中所需的选项,然后在双击时移动到右侧框(选中)中的框。看起来是这样的:

当我检查这些元素时,左侧的框如下所示:

我不知道如何使用Python在Selenium中复制此功能。我试图得到如下列表:

driver.find_element_by_id("fframeworkpage:j_id28:sections_1:j_idd0:sections_23:j_idd164:sections_25:j_idd172:field4_unselected")
但我不知道如何在列表中选择一个选项,以及如何在该选项上加倍

有什么想法吗

更新:

更新2:

action = ActionChains(driver)    
parent = driver.find_element_by_xpath("//select[@title='Attendance Options']")
element = parent.find_element_by_xpath("//option[@value='1']")
action.double_click(element).perform()

parent2 = driver.find_element_by_xpath("//select[@title='Services Offered']")
element2 = parent2.find_element_by_xpath("//option[@value='1']")
action.double_click(element2).perform()

如果知道要单击的列表元素的参数,可以使用元素的XPATH选择器直接选择它,例如
value='1'

element = driver.find_element_by_xpath("//option[@value='1']")
如果要单击该元素以将其添加到所选的列表中,可以调用
click()
方法:

element.click()
如果您希望优化搜索并首先选择元素列表,则可以再次使用列表的XPATH,因为知道HTML DOM元素的标签:

list = driver.find_elements_by_xpath("//optgroup[@label='Available']")
然后,您可以使用自己选择的方法选择列表中的一个元素

要双击元素,您需要使用ActionChain:

from selenium.webdriver.common.action_chains import ActionChains
...
element = ...
actions = ActionChains(driver)
actions.double_click(element).perform()

考虑到您有两个带有
label='Available'
的框,您需要进一步优化搜索,方法是在HTML中向上一层选择父项。您可以首先选择
如果知道要单击的列表元素的参数,可以使用元素的XPATH选择器直接选择它,例如
value='1'

element = driver.find_element_by_xpath("//option[@value='1']")
如果要单击该元素以将其添加到所选的列表中,可以调用
click()
方法:

element.click()
如果您希望优化搜索并首先选择元素列表,则可以再次使用列表的XPATH,因为知道HTML DOM元素的标签:

list = driver.find_elements_by_xpath("//optgroup[@label='Available']")
然后,您可以使用自己选择的方法选择列表中的一个元素

要双击元素,您需要使用ActionChain:

from selenium.webdriver.common.action_chains import ActionChains
...
element = ...
actions = ActionChains(driver)
actions.double_click(element).perform()

考虑到您有两个带有
label='Available'
的框,您需要进一步优化搜索,方法是在HTML中向上一层选择父项。您可以先选择
谢谢!这似乎适用于单击一次,但不适用于双击。如果我使用该列表选择“可用”中的所有项目,如何在该列表中选择一个选项?我有另一个类似的选择框,其他值也是从1开始的,它如何知道从哪个框中选择?我添加了一个双击的示例:)您可以调用列表中的任何选择方法,因为它是一个WebElement,例如list.find_element_by_id(…)或list.find_element_by_xpath(…)。我需要更多的上下文来说明它将如何知道选择哪个框。我已经添加了两个框的屏幕截图,用于选择和检查主姿势中的第二个框。当我试图运行代码时,它似乎无法区分,因为“//option[@value='1']”在左侧的两个框中都存在。有什么方法可以让这两种方法都有效吗?见上面答案的结尾,添加了一点。我在主帖子中添加了我正在尝试的代码。但是,它只选择第一个项目(从“出席”选项)并停止,并且不从提供的服务中添加任何内容。谢谢!这似乎适用于单击一次,但不适用于双击。如果我使用该列表选择“可用”中的所有项目,如何在该列表中选择一个选项?我有另一个类似的选择框,其他值也是从1开始的,它如何知道从哪个框中选择?我添加了一个双击的示例:)您可以调用列表中的任何选择方法,因为它是一个WebElement,例如list.find_element_by_id(…)或list.find_element_by_xpath(…)。我需要更多的上下文来说明它将如何知道选择哪个框。我已经添加了两个框的屏幕截图,用于选择和检查主姿势中的第二个框。当我试图运行代码时,它似乎无法区分,因为“//option[@value='1']”在左侧的两个框中都存在。有什么方法可以让这两种方法都有效吗?见上面答案的结尾,添加了一点。我在主帖子中添加了我正在尝试的代码。但是,它只选择第一个项目(从考勤选项)并停止,并且不会从提供的服务中添加任何内容。请阅读原因。粘贴代码并正确格式化。请阅读原因。粘贴代码并正确格式化。