Fatchoco
Fatchoco

Reputation: 31

Can't seem to select from drop down menu - Python Selenium

As titled, seems like I just can't select the drop down menu from this website no matter what.

from selenium import webdriver
from selenium.webdriver.support.ui import Select

driver=webdriver.Chrome()
driver.get('https://assessing.nashuanh.gov/search.asp')

time.sleep(1)

select=Select(driver.find_element_by_xpath('//*[@id="cboSearchType"]'))
select.select_by_value('2')

Upvotes: 0

Views: 206

Answers (2)

undetected Selenium
undetected Selenium

Reputation: 193308

The <option> element with value/text as Owner within the is within an <frame> so you have to:

  • Induce WebDriverWait for the desired frame to be available and switch to it.

  • Induce WebDriverWait for the desired element to be clickable.

  • You can use either of the following Locator Strategies:

    • Using CSS_SELECTOR and select_by_value():

      driver.get('https://assessing.nashuanh.gov/search.asp')
      WebDriverWait(driver, 20).until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR,"frame[name='middle']")))
      Select(WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "select#cboSearchType")))).select_by_value("Owner")
      
    • Using XPATH and select_by_visible_text():

      driver.get('https://assessing.nashuanh.gov/search.asp')
      WebDriverWait(driver, 20).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,"//frame[@name='middle']")))
      Select(WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//select[@id='cboSearchType']")))).select_by_visible_text("Owner")
      
  • Note : You have to add the following imports :

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
  • Browser Snapshot:

nashuanh


Reference

You can find a couple of relevant discussions in:

Upvotes: 1

Arthur Pereira
Arthur Pereira

Reputation: 1559

First you have to handdle the frames in your page. Also looks like there is no value 2 inside this dropdown, so you have to pass a valid value.

driver.switch_to.frame("middle")

select = Select(driver.find_element_by_xpath('//*[@id="cboSearchType"]'))
select.select_by_value('Parcel')

Upvotes: 2

Related Questions