Home > Blockchain >  how to change select value use python selenium
how to change select value use python selenium

Time:02-04

I want to get selected option using Selenium WebDriver with Python

but I used select_by_value can't get vaule

I have the following HTML code

<select id="play_date" name="play_date" onclick="javascript:GoodsInfo.GetPlayDate(this);" onm ouseover="javascript:GoodsInfo.GetPlayDate(this);" onchange="javascript:GoodsInfo.GetPlayTime(this.value);">
                                        
<option value="" selected="">Select Date</option>
<option value="20230202" style="color: black;">Thu, Feb 02, 2023</option></select>

I am trying to get a list of the option values ('20230202') using Selenium.

At the moment I have the following Python code


 select_date = Select(wait.until(EC.element_to_be_clickable((By.XPATH, "//*[@id='play_date']"))))
 select_date.select_by_value('20230202')

but it's always have is

selenium.common.exceptions.NoSuchElementException: Message: Could not locate element with index 1

Any help or pointers is appreciated, thank you!

CodePudding user response:

If you get error NoSuchElementException it means that you are using a wrong xpath/css_selector or that the element is inside an iframe. You can check by looking at the HTML

enter image description here

So your case is the latter, and to make the xpath work you have first to switch to the iframe, using driver.switch_to.frame() or better EC.frame_to_be_available_and_switch_to_it.

WebDriverWait(driver, 9).until(EC.frame_to_be_available_and_switch_to_it((By.ID, "product_detail_area")))

dropdown_date = WebDriverWait(driver,9).until(EC.element_to_be_clickable((By.ID, "play_date")))
options = []
# open menu so that options are loaded
dropdown_date.click()
# wait until options are loaded
while not options:
    options = driver.find_elements(By.CSS_SELECTOR, "#play_date option:not([value=''])")
    time.sleep(1)

# close menu
dropdown_date.click()
print('available options:')
for opt in options:
    print(opt.get_attribute('value'))

select_date = Select(dropdown_date)
select_date.select_by_value(input('enter value: '))
  • Related