繁体   English   中英

Selenium-Python:无法单击选择中的选项

[英]Selenium-Python: unable to click an option in a select

我正在尝试在 select 元素中选择一个选项。 此下拉列表还包含一个带有自动完成功能的搜索框。 它看起来像这样:

在此处输入图片说明

我尝试了多种方法,但都没有成功。

试验 1:select_by_visible_text

from selenium.webdriver.support.ui import Select
type_act = Select(driver.find_element_by_xpath("//*[@id=\"edit-field-activity-type-und\"]"))
type_act.select_by_visible_text("Begeleide uitstap - Excursie")

试验 2:select_by_index

type_act = Select(driver.find_element_by_name("field_activity_type[und]"))
type_act.select_by_index(1)

试用 3:在循环中单击选项

type_act = driver.find_element_by_xpath("//*[@id=\"edit-field-activity-type-und\"]")
for option in type_act.find_elements_by_tag_name("option"):
    print(option.text)
    if option.text == "Begeleide uitstap - Excursie":
        option.click()
        break

select 元素的 HTML 代码

<div class="field-type-taxonomy-term-reference field-name-field-activity-type field-widget-options-select form-wrapper" id="edit-field-activity-type">
<div class="form-item form-type-select form-item-field-activity-type-und">
    <label for="edit-field-activity-type-und">Activiteitstype <span class="form-required" title="Dit veld is verplicht.">*</span></label>
    <select class="chosen-enable form-select required chosen-processed" id="edit-field-activity-type-und" name="field_activity_type[und]" style="position: absolute; opacity: 0;">
        <option value="_none">- Kies uit deze lijst -</option>
        <option value="393">Begeleide uitstap - Excursie</option>
        <option value="427">Beheerwerken</option>
        <option value="425">Buiten - Met kinderen</option>
        <option value="231">Concert</option>
        <option value="389">Cursus en workshop</option>
        <option value="399">Feest en eet &amp; drinkfestijn</option>
        <option value="561">Fietstocht en wandelroute</option>
        <option value="387">Film</option>
        <option value="565">Inventarisatie</option>
        <option value="391">Kamp en vakantie</option>
        <option value="415">Knutselen - Met kinderen</option>
        <option value="385">Lezing en congres</option>
        <option value="407">Markt en braderie</option>
        <option value="409">Monument &amp; erfgoed</option>
        <option value="417">Museum - Met kinderen</option>
        <option value="411">Natuur en landschap</option>
        <option value="563">Observatie</option>
        <option value="503">Onbepaald</option>
        <option value="431">Onderzoek/Studie</option>
        <option value="413">Opendeurdag</option>
        <option value="397">Quiz en spel</option>
        <option value="405">Tentoonstelling</option>
        <option value="435">Vergadering</option>
        <option value="559">Wandeling</option>
    </select>
    <div class="chosen-container chosen-container-single" style="width: 200px;" title="" id="edit_field_activity_type_und_chosen">
        <a class="chosen-single" tabindex="-1">
            <span>Begeleide uitstap - Excursie</span>
            <div>
                <b></b>
            </div>
        </a>
        <div class="chosen-drop">
            <div class="chosen-search">
                <input type="text" autocomplete="off">
            </div>
            <ul class="chosen-results">
                <li class="active-result result-selected" style="" data-option-array-index="0">- Kies uit deze lijst -</li>
                <li class="active-result result-selected" style="" data-option-array-index="1">Begeleide uitstap - Excursie</li>
                <li class="active-result" style="" data-option-array-index="2">Beheerwerken</li>
                <li class="active-result" style="" data-option-array-index="3">Buiten - Met kinderen</li>
                <li class="active-result" style="" data-option-array-index="4">Concert</li>
                <li class="active-result" style="" data-option-array-index="5">Cursus en workshop</li>
                <li class="active-result" style="" data-option-array-index="6">Feest en eet &amp; drinkfestijn</li>
                <li class="active-result" style="" data-option-array-index="7">Fietstocht en wandelroute</li>
                <li class="active-result" style="" data-option-array-index="8">Film</li>
                <li class="active-result" style="" data-option-array-index="9">Inventarisatie</li>
                <li class="active-result" style="" data-option-array-index="10">Kamp en vakantie</li>
                <li class="active-result" style="" data-option-array-index="11">Knutselen - Met kinderen</li>
                <li class="active-result" style="" data-option-array-index="12">Lezing en congres</li>
                <li class="active-result" style="" data-option-array-index="13">Markt en braderie</li>
                <li class="active-result" style="" data-option-array-index="14">Monument &amp; erfgoed</li>
                <li class="active-result" style="" data-option-array-index="15">Museum - Met kinderen</li>
                <li class="active-result" style="" data-option-array-index="16">Natuur en landschap</li>
                <li class="active-result" style="" data-option-array-index="17">Observatie</li>
                <li class="active-result" style="" data-option-array-index="18">Onbepaald</li>
                <li class="active-result" style="" data-option-array-index="19">Onderzoek/Studie</li>
                <li class="active-result" style="" data-option-array-index="20">Opendeurdag</li>
                <li class="active-result" style="" data-option-array-index="21">Quiz en spel</li>
                <li class="active-result" style="" data-option-array-index="22">Tentoonstelling</li>
                <li class="active-result" style="" data-option-array-index="23">Vergadering</li>
                <li class="active-result" style="" data-option-array-index="24">Wandeling</li>
            </ul>
        </div>
    </div>
</div>

我正在使用 chromedriver。 没有错误,但没有选择任何内容。 我也可以打印出选项,但单击方法似乎不起作用。 任何人都可以帮我解决这个问题吗?

也许尝试在项目上使用.sendkeys()来输入您要查找的文本?

from selenium.webdriver.common.keys import Keys
type_act = driver.find_element_by_xpath("//*[@id=\"edit-field-activity-type-und\"]")
type_act.send_keys("Begeleide uitstap - Excursie")
type_act.send_keys(Keys.ENTER)

如果您的正常单击方法不起作用,您可以使用JavaScriptExecutor单击此处。
你可以像这样使用它:

type_act = driver.find_element_by_xpath("//*[@id=\"edit-field-activity-type-und\"]")
driver.execute_script("arguments[0].click();", type_act)

好的,我找到了。 它实际上是需要处理的 a 标记内跨度中的文本。 您可以在下面找到对我有用的解决方案。 希望它也能帮助别人。

type_act = driver.find_element_by_xpath('//*[@id="edit_field_activity_type_und_chosen"]/a/span')
driver.execute_script("var ele=arguments[0]; ele.innerHTML = '" + row['type_act'] + "';", type_act)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM