Bene Bene - 24 days ago 14
Python Question

Cannot select an option from drop down menu Python Selenium

I am relatively new to Python (well, more than relatively). I need to select an option from a drop down menu. I have tried almost all the solutions available. But nothing seems to work.
This is the page I am interacting with: http://www.europarl.europa.eu/plenary/en/debates-video.html?action=1&tabActif=tabResult#sidesForm
And this is the part of the page source that is giving me problems:

<select id="criteriaSidesLeg" name="leg" style="display:none;" aria-disabled="false">

<option title="2014 - 2019" value="8">2014 - 2019</option>

<option title="2009 - 2014" value="7" selected="selected">2009 - 2014</option>

<option title="2004 - 2009" value="6">2004 - 2009</option>

<option title="1999 - 2004" value="5">1999 - 2004</option>

</select>


what I have tried up to now is:

import time
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import Select
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
# pressing the botton year menu making the element visible
elem_year_arrow=driver.find_element_by_id("criteriaSidesLeg-button")
elem_year_arrow.click()
year= driver.find_element_by_id('criteriaSidesLeg')
for option in year.find_elements_by_tag_name('option'):
if option.text=='2009 - 2014':
option.click()
break


this gives me this error:

selenium.common.exceptions.ElementNotVisibleException: Message: element not visible: Element is not currently visible and may not be manipulated
(Session info: chrome=54.0.2840.87)
(Driver info: chromedriver=2.25.426935 (820a95b0b81d33e42712f9198c215f703412e1a1),platform=Mac OS X 10.10.5 x86_64)


I have tried also this other solution

wait = WebDriverWait(driver, 10)
element = wait.until(EC.visibility_of_element_located((By.ID,"criteriaSidesLeg")))
select = Select(element)
select.select_by_value('7')


this is not giving me error but this TimeOutexception

raise TimeoutException(message, screen, stacktrace)
selenium.common.exceptions.TimeoutException: Message:


So I also tried to execute this command line:

driver.execute_script("var select = arguments[0]; for(var i = 0; i < select.options.length; i++){ if(select.options[i].value == arguments[1]){ select.options[i].selected = true; } }", element, "01")


But again getting the aforementioned Timeout exception
how to proceed ?
I hope that the question is clear enough and thank you all in advance!

Answer

You're trying to handle wrong element. Try this code and let me know in case of any issues:

driver.find_element_by_xpath('//a[@id="criteriaSidesLeg-button"]').click()
driver.find_element_by_xpath('//a[text()="2009 - 2014"]').click()

Same without using XPath:

driver.find_element_by_id('criteriaSidesLeg-button').click()
driver.find_element_by_link_text('2009 - 2014').click()
Comments