Выберите опцию из выпадающего списка, используя selenium с python

#python #selenium

#python #селен

Вопрос:

Добрый день. Как мне выбрать опцию из выпадающего меню с элементом html <span class="underlying">AUD/JPY</span> . Я попробовал рекомендуемые методы, такие как from selenium.webdriver.support.ui import Select ; select = Select(driver.find_element_by_xpath('//*[@id="all-accounts"]/li/a/div[1]/div[2]')); После запуска скрипта консоль возвращает сообщение «Не удается найти элемент». Но когда я запускаю скрипт через однострочную консоль, выпадающий вариант выбирается точно.

 from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import Select

#allow pop up notifications

option = Options()
option.add_argument("--disable-infobars")
option.add_argument("start-maximized")
option.add_argument("--disable-extensions")
option.add_experimental_option("prefs", {"profile.default_content_setting_values.notifications": 1})

#start the webpage

browser = webdriver.Chrome(chrome_options=option, executable_path='C:\Users\User\Documents\P.W\Projects\pythonProject2\chromedriver')
browser.get('https://oauth.binary.com/oauth2/authorize?app_id=1amp;l=ENamp;signup_device=desktopamp;date_first_contact=2020-09-11')
emailbar = browser.find_element_by_xpath('//*[@id="txtEmail"]')
emailbar.send_keys('myusername')
passwordbar = browser.find_element_by_xpath('//*[@id="txtPass"]')
passwordbar.send_keys('password')
loginbutton = browser.find_element_by_xpath('//*[@id="frmLogin"]/div[3]/button')
loginbutton.click()

#select between real account or virtual account

dropdownaccount = browser.find_element_by_xpath('//*[@id="main-account"]/li/a/div[2]')
dropdownaccount.click()  

Комментарии:

1. Можете ли вы поделиться демонстрационным набором учетных данных?

Ответ №1:

При работе с selects в Selenium я делаю следующее:

  1. Найдите select и нажмите на него
  2. Найдите нужную опцию и нажмите на нее

Так, например

     select = driver.find_element_by_id('my_select')
    select.click()
    selected_option = driver.find_element_by_id('my_option_id')
    selected_option.click()
  

Конечно, вы можете изменить методы поиска, чтобы использовать xpath, css и т.д. В зависимости от вашей веб-страницы.

Комментарии:

1. Верно, но проблема не в выборе, а в его нахождении. он не может найти эти элементы

2. Ну, есть 2 возможности. 1. Ваш xpath неверен. 2. Содержимое является динамическим и еще не загружено. Когда вы говорите «однострочная консоль», если вы говорите о консоли браузера, то, скорее всего, ваш xpath правильный. Если нет, вы могли бы попробовать что-то вроде: driver.find_element_by_xpath(‘//span[содержит(text(), ‘AUD / JPY’)]’). Во-вторых, вы можете использовать WebDriverWait(), чтобы попытаться дождаться загрузки содержимого.