Skip to main content
 首页 » 编程设计

python selenium 选择具有匹配正则表达式的值的下拉选项

2024年10月25日29Terrylee

我正在尝试单击一个下拉选项,该选项的值以特定字符串结尾。

我只知道当我有完整的值时如何做到这一点,而不仅仅是部分字符串匹配。

请帮忙!

<select name="dropdown_selected_size_name" autocomplete="off" data-a-native-class="twister-dropdown-highlight" data-a-touch-header="Size" id="native_dropdown_selected_size_name" class="a-native-dropdown twister-dropdown-highlight"> 
        <option value="0,B0019WTTQE" class="dropdownAvailable" data-a-css-class="dropdownAvailable" id="native_size_name_0" data-a-id="size_name_0" data-a-html-content="6 B(M) US"> 
            6 B(M) US 
        </option> 
        <option value="1,B0019WO400" class="dropdownAvailable" data-a-css-class="dropdownAvailable" id="native_size_name_1" data-a-id="size_name_1" data-a-html-content="7 B(M) US"> 
            7 B(M) US 
        </option> 
</select> 

创建选择对象:

from selenium import webdriver 
from selenium.webdriver.support.select import Select 
browser = webdriver.Firefox() 
browser.get('http://www.amazon.com/dp/B0019WTTQE') 
select = Select(browser.find_element_by_id('native_dropdown_selected_size_name')) 

尝试一:

select.select_by_value('B0019WTTQE').click(); 

selenium.common.exceptions.NoSuchElementException: Message: Cannot locate option with value: B0019WTTQE

尝试二:

select.select_by_value(re.compile(r'B0019WTTQE$')).click(); 

TypeError: argument of type '_sre.SRE_Pattern' is not iterable

请您参考如下方法:

没有内置方法可以通过正则表达式匹配选择选项。

您必须遍历 options并检查它们中的每一个:

select = Select(browser.find_element_by_id('native_dropdown_selected_size_name')) 
 
pattern = re.compile(r'B0019WTTQE$') 
for option in select.options: 
    value = option.get_attribute('value') 
    if pattern.search(value): 
        option.click() 
        break 

另一种可能的解决方案是使用 ends-with CSS 选择器:

select = browser.find_element_by_id('native_dropdown_selected_size_name') 
 
option = select.find_element_by_css_selector('option[value$=B0019WTTQE]') 
option.click() 

请注意,还有一个 ends-with() xpath 函数,但它是一个 part of XPath 2.0据我了解,浏览器不支持。 contains() 绝对不是直接的替代方案,但也适用于您的用例:

select = browser.find_element_by_id('native_dropdown_selected_size_name') 
 
option = select.find_element_by_xpath('.//option[contains(@value, "B0019WTTQE")]') 
option.click()