简体   繁体   中英

Cant select a value from a drop down list using Selenium in python

I'm trying to select the year 1989 in the drop down list on this sign up page.

driver.get("https://club.pokemon.com/us/pokemon-trainer-club/sign-up/")
elem = driver.find_element_by_id("id_dob")
elem.send_keys(Keys.RETURN)
elem = driver.find_element_by_class_name("picker__footer")

find_element_by_xpath("//*[@id='sign-up-theme']/option[@value='1989']").click()

Select(driver.find_element_by_css_selector("#sign-up-theme")).select_by_value(1989).click()

I'm using chrome as a browser and right now it says it cannot find the element.

Here is the html but if u need something more/different i included the link to the site im using. Ps. not a profesional coder or anything super duper scrub when it comes to coding.

<div class="custom-select-wrapper" style="visibility: visible;"><select class="year" style="display: none;"><option value="1936">1936</option><option value="1937">1937</option><option value="1938">1938</option><option value="1939">1939</option><option value="1940">1940</option><option value="1941">1941</option><option value="1942">1942</option><option value="1943">1943</option><option value="1944">1944</option><option value="1945">1945</option><option value="1946">1946</option><option value="1947">1947</option><option value="1948">1948</option><option value="1949">1949</option><option value="1950">1950</option><option value="1951">1951</option><option value="1952">1952</option><option value="1953">1953</option><option value="1954">1954</option><option value="1955">1955</option><option value="1956">1956</option><option value="1957">1957</option><option value="1958">1958</option><option value="1959">1959</option><option value="1960">1960</option><option value="1961">1961</option><option value="1962">1962</option><option value="1963">1963</option><option value="1964">1964</option><option value="1965">1965</option><option value="1966">1966</option><option value="1967">1967</option><option value="1968">1968</option><option value="1969">1969</option><option value="1970">1970</option><option value="1971">1971</option><option value="1972">1972</option><option value="1973">1973</option><option value="1974">1974</option><option value="1975">1975</option><option value="1976">1976</option><option value="1977">1977</option><option value="1978">1978</option><option value="1979">1979</option><option value="1980">1980</option><option value="1981">1981</option><option value="1982">1982</option><option value="1983">1983</option><option value="1984">1984</option><option value="1985">1985</option><option value="1986">1986</option><option value="1987">1987</option><option value="1988">1988</option><option value="1989">1989</option><option value="1990">1990</option><option value="1991">1991</option><option value="1992">1992</option><option value="1993">1993</option><option value="1994">1994</option><option value="1995">1995</option><option value="1996">1996</option><option value="1997">1997</option><option value="1998">1998</option><option value="1999">1999</option><option value="2000">2000</option><option value="2001">2001</option><option value="2002">2002</option><option value="2003">2003</option><option value="2004">2004</option><option value="2005">2005</option><option value="2006">2006</option><option value="2007">2007</option><option value="2008">2008</option><option value="2009">2009</option><option value="2010">2010</option><option value="2011">2011</option><option value="2012">2012</option><option value="2013">2013</option><option value="2014">2014</option><option value="2015">2015</option><option value="2016" selected="">2016</option></select><div class="custom-select-menu" tabindex="0"><label class="styled-select button-black opened">2016</label><div class="custom-scrollbar custom-select-scrollbar" style="height: 200px; display: block;"><div class="viewport"><ul data-select-name="undefined" class="overview"><li data-option-value="2016" class="selected">2016</li><li data-option-value="2015" class="">2015</li><li data-option-value="2014" class="">2014</li><li data-option-value="2013" class="">2013</li><li data-option-value="2012" class="">2012</li><li data-option-value="2011" class="">2011</li><li data-option-value="2010" class="">2010</li><li data-option-value="2009" class="">2009</li><li data-option-value="2008" class="">2008</li><li data-option-value="2007" class="">2007</li><li data-option-value="2006" class="">2006</li><li data-option-value="2005" class="">2005</li><li data-option-value="2004" class="">2004</li><li data-option-value="2003" class="">2003</li><li data-option-value="2002" class="">2002</li><li data-option-value="2001" class="">2001</li><li data-option-value="2000" class="">2000</li><li data-option-value="1999" class="">1999</li><li data-option-value="1998" class="">1998</li><li data-option-value="1997" class="">1997</li><li data-option-value="1996" class="">1996</li><li data-option-value="1995" class="">1995</li><li data-option-value="1994" class="">1994</li><li data-option-value="1993" class="">1993</li><li data-option-value="1992" class="">1992</li><li data-option-value="1991" class="">1991</li><li data-option-value="1990" class="">1990</li><li data-option-value="1989" class="">1989</li><li data-option-value="1988" class="">1988</li><li data-option-value="1987" class="">1987</li><li data-option-value="1986" class="">1986</li><li data-option-value="1985" class="">1985</li><li data-option-value="1984" class="">1984</li><li data-option-value="1983" class="">1983</li><li data-option-value="1982" class="">1982</li><li data-option-value="1981" class="">1981</li><li data-option-value="1980" class="">1980</li><li data-option-value="1979" class="">1979</li><li data-option-value="1978" class="">1978</li><li data-option-value="1977" class="">1977</li><li data-option-value="1976" class="">1976</li><li data-option-value="1975" class="">1975</li><li data-option-value="1974" class="">1974</li><li data-option-value="1973" class="">1973</li><li data-option-value="1972" class="">1972</li><li data-option-value="1971" class="">1971</li><li data-option-value="1970" class="">1970</li><li data-option-value="1969" class="">1969</li><li data-option-value="1968" class="">1968</li><li data-option-value="1967" class="">1967</li><li data-option-value="1966" class="">1966</li><li data-option-value="1965" class="">1965</li><li data-option-value="1964" class="">1964</li><li data-option-value="1963" class="">1963</li><li data-option-value="1962" class="">1962</li><li data-option-value="1961" class="">1961</li><li data-option-value="1960" class="">1960</li><li data-option-value="1959" class="">1959</li><li data-option-value="1958" class="">1958</li><li data-option-value="1957" class="">1957</li><li data-option-value="1956" class="">1956</li><li data-option-value="1955" class="">1955</li><li data-option-value="1954" class="">1954</li><li data-option-value="1953" class="">1953</li><li data-option-value="1952" class="">1952</li><li data-option-value="1951" class="">1951</li><li data-option-value="1950" class="">1950</li><li data-option-value="1949" class="">1949</li><li data-option-value="1948" class="">1948</li><li data-option-value="1947" class="">1947</li><li data-option-value="1946" class="">1946</li><li data-option-value="1945" class="">1945</li><li data-option-value="1944" class="">1944</li><li data-option-value="1943" class="">1943</li><li data-option-value="1942" class="">1942</li><li data-option-value="1941" class="">1941</li><li data-option-value="1940" class="">1940</li><li data-option-value="1939" class="">1939</li><li data-option-value="1938" class="">1938</li><li data-option-value="1937" class="">1937</li><li data-option-value="1936" class="">1936</li></ul></div></div><input type="hidden" name="undefined" value="2016"></div></div>

You can actually avoid dealing with the date picker in the first place and set the "date of birth" directly in the input . For that, we can remove the readonly property from the "date of birth" input and replace the element with it's clone to remove all event listeners which would help to avoid having the datepicker being tied to the input.

Works for me:

from selenium import webdriver


driver = webdriver.Firefox()
driver.get("https://club.pokemon.com/us/pokemon-trainer-club/sign-up/")

elem = driver.find_element_by_id("id_dob")
driver.execute_script("arguments[0].removeAttribute('readonly'); arguments[0].removeAttribute('class');", elem)
driver.execute_script("""
var clone = arguments[0].cloneNode();
while (arguments[0].firstChild) {
  clone.appendChild(arguments[0].lastChild);
}
arguments[0].parentNode.replaceChild(clone, arguments[0]);
""", elem)

elem = driver.find_element_by_id("id_dob")
elem.clear()
elem.send_keys("1989-02-20")

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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