我在Python中使用Selenium Kit,并试图从一个下拉菜单中选择一个选项。
为此,我使用了 python driver.select_by_visible_text()
.我的问题是,现在可见的文本总是包含我正在寻找的值,但之后添加了一些东西。我的问题是,我现在的问题是,可见的文本总是包含我寻找的值,但在之后添加了一些东西。select_by_visible_text()
只是找到了准确的选项,但我不能准确地命名它。
例如:我想找 "W33 "这个选项,网站上却说 "W33(仅剩4个)"。我在找 "W33 "这个选项,网站上说 "W33(只剩4个)"。我想选择 "W33(仅剩4个)",但不知道如何实现?
你可以通过使用 options
的属性 Select
对象。
from selenium.webdriver.support.ui import Select
elem = driver.find_element_by_id('myselect')
elem_select = Select(elem)
opts = elem_select.options
然后,检查其中哪些是匹配的。在你的例子中,检查 text
属性。
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
后面总是跟着一个 可变文字例如 (only 4 left)
, (only 3 left)
等,所以 select_by_visible_text()
不一定有效。您可能需要考虑其中的一种。
作为一个替代方案,你也可以使用 xpath 基于 定位器策略 如下所示。
driver.find_element_by_xpath("//select//option[contains(., 'W33')]").click()
注:您可能需要扩展
<select>
元素,然后再点击选项。
理想情况下,你需要诱导 WebDriverWait 对于 element_to_be_clickable()
如下所示。
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
你可以在中找到相关讨论。