我遇到了一个我不知道如何迭代其选项的字段。我需要能够一一选择每个元素,以便页面加载关联的信息,然后为每个选项检索该信息。结构如下。
<div class="col-xs-10 col-xs-offset-1 mar-ver">
<select id="filter" multiple data-placeholder="Filtrar.." name="namefilter" style="display: none;">
<option value="limitedtest">limit test</option>
<option value="test_2">Test 2</option>
<option value="test_3">Test 3</option>
...
</select>
<div class="chosen-container chosen-container-multi" title id="agendafilter_chosen" style="width: 99%;">
<ul class="chosen-choices">
<li class="search-field">
<input class="chosen-search-input default" type="text" autocomplete="off" value="Filtrar" style="width: 147px;">
</li>
</ul>
<div class="chosen-drop">
<ul class="chosen-results">
<li class="active-result" data-option-array-index="0">limit test</li>
<li class="active-result" data-option-array-index="1">Test 2</li>
<li class="active-result" data-option-array-index="2">Test 3</li>
</ul>
</div>
</div>
</div>
我尝试从 select id="filter" 中选择一个选项,但它抛出“选择禁用错误”。 我还尝试将值传递给输入,但它只显示列表并删除发送的文本。
option = "Test 3"
chosen_search_input = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.XPATH, "/html/body/div[1]/div[2]/div[4]/div/div/div/div/div[1]/div[2]/div[1]/div[1]/div/ul/li/input"))
)
chosen_search_input.send_keys(option)
您还可以建议其他方法吗? 感谢您的宝贵时间。
您正在处理Chosen库。
这改变了通过本机 Selenium 功能进行的经典 Select 处理。
以下代码对我来说工作正常(在here中的选择上进行了测试):
wait = WebDriverWait(driver, 10)
driver.get("https://harvesthq.github.io/chosen/")
dropdown_wrapper = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "div.chosen-container-single"))).click()
options = [option.text for option in driver.find_elements(By.CSS_SELECTOR, '.chosen-results li') if option.text]
for i, option in enumerate(options):
if i != 0:
wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "div.chosen-container-single"))).click()
wait.until(EC.element_to_be_clickable((By.XPATH, f'//li[text()="{option}"]'))).click()
wait.until(EC.invisibility_of_element_located((By.CLASS_NAME, 'chosen-loading')))
# your retrieve logic goes here
# your retrieve logic goes here
# your retrieve logic goes here
print("Handled: " + option)
因此,您首先收集所有选项,然后通过打开下拉列表并选择所需的选项来一一处理它们。