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

问题描述 投票:0回答:1

我在Python中使用Selenium Kit,并试图从一个下拉菜单中选择一个选项。

为此,我使用了 python driver.select_by_visible_text() .我的问题是,现在可见的文本总是包含我正在寻找的值,但之后添加了一些东西。我的问题是,我现在的问题是,可见的文本总是包含我寻找的值,但在之后添加了一些东西。select_by_visible_text() 只是找到了准确的选项,但我不能准确地命名它。

例如:我想找 "W33 "这个选项,网站上却说 "W33(仅剩4个)"。我在找 "W33 "这个选项,网站上说 "W33(只剩4个)"。我想选择 "W33(仅剩4个)",但不知道如何实现?

python python-3.x selenium selenium-webdriver drop-down-menu
1个回答
0
投票

你可以通过使用 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()

来源: Select 在selenium-python文档


0
投票

作为静态部分的 显性文字W33 后面总是跟着一个 可变文字例如 (only 4 left), (only 3 left)等,所以 select_by_visible_text() 不一定有效。您可能需要考虑其中的一种。


替代性

作为一个替代方案,你也可以使用 基于 定位器策略 如下所示。

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

参考资料

你可以在中找到相关讨论。

© www.soinside.com 2019 - 2024. All rights reserved.