Как извлечь текст из выбранной опции выпадающего меню, используя Selenium и Python - PullRequest
2 голосов
/ 03 февраля 2020

Я пытаюсь выделить текст пункта меню, обведенного на снимке экрана. В данном случае это «Age Harden».

Лучшее, что я могу получить, это selected value из 17043, а не текст «Age Harden».

Вот что я пробовал :

driver.find_element_by_xpath("//select[@id='lstOperation_Key']").get_attribute('text_content')

Возвращает None

driver.find_element_by_xpath("//select[@id='lstOperation_Key']").get_attribute('value')

Возвращает 17043

driver.find_element_by_xpath("//select[@id='lstOperation_Key']").get_attribute('text')

Возвращает None

driver.find_element_by_xpath("//select[@id='lstOperation_Key']").get_attribute('selected value')

Возвращает None

my_furnace_parameters_data['Furnace_Operation'] = driver.find_element_by_xpath("//select[@id='lstOperation_Key']//option[1]").get_attribute('text')

Возвращает «Возраст ужесточения», НО, когда я проверяю это на операции, которая не является первой в списке, такой как «Обработка в зоопарке», если она не выполняется - она ​​все равно возвращает «Возраст» Harden '.

Любая помощь или указатели приветствуются, спасибо! enter image description here

Ответы [ 2 ]

3 голосов
/ 03 февраля 2020

Использование Select класс:

from selenium.webdriver.support.select import Select

operation_key = Select(driver.find_element_by_id('lstOperation_Key'))
operation_key.select_by_visible_text('Age Harden')
# operation_key.select_by_value('17043')
# operation_key.select_by_index(1)

Вы можете использовать WebDriverWait для ожидания доступности элемента:

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

wait = WebDriverWait(driver, 10)
operation_key = Select(wait.until(EC.element_to_be_clickable((By.ID, 'lstOperation_Key'))))
operation_key.select_by_visible_text('Age Harden')
# operation_key.select_by_value('17043')
# operation_key.select_by_index(1)
2 голосов
/ 04 февраля 2020

first_selected_option

first_selected_option() возвращает первую выбранную опцию в этом теге выбора (или текущую выбранную опцию в обычном выборе).


Кажется ты был довольно близко Чтобы извлечь textContent из выбранных по умолчанию selected <option>, вы можете использовать свойство first_selected_option для идентификации элемента, и вы можете извлечь текст опции в соответствии с приведенным ниже решением:

  • Кодовый блок:

    select = Select(WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//select[@id='lstOperation_Key' and @name='lstOperation_Key']")))) //selecting tag
    element = select.first_selected_option
    print(element.text)
    # or
    print(element.get_attribute("innerHTML"))
    
...