如何使用Selenium和Python通过部分文本从下拉菜单中选择选项

如何使用Selenium和Python通过部分文本从下拉菜单中选择选项,python,selenium,selenium-webdriver,xpath,drop-down-menu,Python,Selenium,Selenium Webdriver,Xpath,Drop Down Menu,我正在使用Python中的Selenium工具包,并试图从下拉菜单中选择一个选项 为此,我使用python驱动程序。按可视文本选择。 我现在的问题是,可见文本总是包含我正在查找的值,但之后添加了一些内容。select_by_visible_文本只找到了确切的选项,但我无法准确地命名它 例如:我正在寻找W33选项,网站上说W33只剩下4个。我想选择W33只剩下4个,但不知道如何实现这一点 您可以通过选择对象上的“选项”属性获得所有选项的列表: 然后,检查哪一个匹配。在您的示例中,检查文本属性: o

我正在使用Python中的Selenium工具包,并试图从下拉菜单中选择一个选项

为此,我使用python驱动程序。按可视文本选择。 我现在的问题是,可见文本总是包含我正在查找的值,但之后添加了一些内容。select_by_visible_文本只找到了确切的选项,但我无法准确地命名它


例如:我正在寻找W33选项,网站上说W33只剩下4个。我想选择W33只剩下4个,但不知道如何实现这一点

您可以通过选择对象上的“选项”属性获得所有选项的列表:

然后,检查哪一个匹配。在您的示例中,检查文本属性:

opts_to_select = [o for o in opts if o.text.startswith('W33')]
my_option = opts_to_select[0] # select first match
                              # (Maybe you also want to raise an error if 
                              # there is more than one match.)
然后选择它:

if not my_elem.is_selected():
    my_elem.click()
来源:

因为可视文本的静态部分(即W33)后面总是跟一个可变文本,例如只剩下4个、只剩下3个等,所以可能无效。你可能不得不考虑其中之一:

可供替代的 作为替代方案,您也可以使用基于的,如下所示:

driver.find_element_by_xpath("//select//option[contains(., 'W33')]").click()
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//select//option[contains(., 'W33')]"))).click()
注意:在单击该选项之前,可能需要先展开元素

理想情况下,您需要诱导元素可点击,如下所示:

driver.find_element_by_xpath("//select//option[contains(., 'W33')]").click()
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//select//option[contains(., 'W33')]"))).click()
注意:您必须添加以下导入:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
参考 您可以在以下内容中找到相关讨论:


为什么会被否决,有什么不对劲吗?它回答了问题并被接受。