python selenium select 具有匹配正则表达式值的下拉选项
python selenium select dropdown option with value matching regex
我正在尝试单击具有以特定字符串结尾的值的下拉选项。
我只知道当我有完整的值时如何做到这一点,而不仅仅是部分字符串匹配。
请帮忙!
<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>
创建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
没有内置方式通过正则表达式匹配select选项。
您必须遍历 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 或 :
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()
我正在尝试单击具有以特定字符串结尾的值的下拉选项。
我只知道当我有完整的值时如何做到这一点,而不仅仅是部分字符串匹配。
请帮忙!
<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>
创建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
没有内置方式通过正则表达式匹配select选项。
您必须遍历 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 或 :
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()