0

Code trials:

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

browser = webdriver.Chrome()
url = "https://ssangmun.sen.es.kr/66769/subMenu.do"
browser.get(url)
browser.maximize_window()

select = Select(browser.find_element_by_id("srhMlsvYear"))
select.options[0].text #output "2017"
select.select_by_index(0).text #output Nonetype Error

When I use:

select.options[0].text

It works! But when I use:

select.select_by_dex(0)

it occur Nonetype Error

Why this error occur?

undetected Selenium
  • 183,867
  • 41
  • 278
  • 352

2 Answers2

0

with id

#srhMlsvYear

there are two matches in HTMLDOM.

I would recommend you to use the below CSS with explicit wait:

select#srhMlsvYear

and use it like this:

wait = WebDriverWait(browser, 30)
ele = wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "select#srhMlsvYear")))
select = Select(ele)
select.select_by_index(0)

Imports:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
cruisepandey
  • 28,520
  • 6
  • 20
  • 38
0

Presumably, the following option texts:

  • 2017년
  • 2018년
  • 2019년 etc

are present within the DOM Tree as soon as the url is invoked. That's why when you:

select.options[0].text

You see the output:

2017

However, select_by_index(index) doesn't returns anything. So while you try to extract the text after selecting the desired option as:

select.select_by_index(0).text

the output is Nonetype Error


Solution

After selecting the desired option to get the option text you can use the attribute first_selected_option as follows:

  • Code Block:

    from selenium.webdriver.support.ui import Select
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
    driver.get("https://ssangmun.sen.es.kr/66769/subMenu.do")
    select = Select(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "select#srhMlsvYear"))))
    select.select_by_index(0)
    print(select.first_selected_option.text)
    
  • Console Output:

    2017년
    
undetected Selenium
  • 183,867
  • 41
  • 278
  • 352