1
votes

Selenium-Python: impossible de cliquer sur une option dans une sélection

J'essaie de sélectionner une option dans un élément de sélection. Cette liste déroulante contient également une zone de recherche avec saisie semi-automatique. Cela ressemble à ceci:

 enter image description here

J'ai essayé plusieurs méthodes, mais sans succès.

Essai 1 : select_by_visible_text

<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>

Essai 2: select_by_index

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

Essai 3: cliquer sur une option dans une boucle

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

Code HTML de l'élément select

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")


0 commentaires

3 Réponses :


0
votes

Vous pouvez utiliser JavaScriptExecutor cliquez ici si votre méthode de clic normale ne fonctionne pas.
Vous pouvez l'utiliser comme:

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


1 commentaires

Merci pour votre réponse, mais malheureusement cela ne fonctionne pas non plus.



1
votes

Peut-être essayer .sendkeys () sur l'élément pour taper le texte que vous recherchez?

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)


1 commentaires

Merci de votre aide. Mais cela ne fonctionne pas non plus pour moi.



0
votes

D'accord, je l'ai trouvé. C'était en fait le texte de la plage dans la balise a qui devait être adressé. Vous trouverez ci-dessous la solution qui a fonctionné pour moi. J'espère que cela aide aussi quelqu'un d'autre.

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)


0 commentaires