如何使用Selenium和Python提取下拉菜单所选选项的文本

如何使用Selenium和Python提取下拉菜单所选选项的文本,python,selenium,select,xpath,drop-down-menu,Python,Selenium,Select,Xpath,Drop Down Menu,我试图选择屏幕截图中圈出的菜单选项的文本。在这种情况下,它是“老化硬化” 我能得到的最好结果是17043的选定值,而不是文本“老化硬化” 以下是我尝试过的: driver.find_element_by_xpath("//select[@id='lstOperation_Key']").get_attribute('text_content') 返回None driver.find_element_by_xpath("//select[@id='lstOperation_Key']").get

我试图选择屏幕截图中圈出的菜单选项的文本。在这种情况下,它是“老化硬化”

我能得到的最好结果是
17043
选定值,而不是文本“老化硬化”

以下是我尝试过的:

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')
driver.find_element_by_xpath("//select[@id='lstOperation_Key']").get_attribute('selected value')
my_furnace_parameters_data['Furnace_Operation'] = driver.find_element_by_xpath("//select[@id='lstOperation_Key']//option[1]").get_attribute('text')
返回
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('value')
driver.find_element_by_xpath("//select[@id='lstOperation_Key']").get_attribute('selected value')
my_furnace_parameters_data['Furnace_Operation'] = driver.find_element_by_xpath("//select[@id='lstOperation_Key']//option[1]").get_attribute('text')
返回
None

driver.find_element_by_xpath("//select[@id='lstOperation_Key']").get_attribute('value')
driver.find_element_by_xpath("//select[@id='lstOperation_Key']").get_attribute('selected value')
my_furnace_parameters_data['Furnace_Operation'] = driver.find_element_by_xpath("//select[@id='lstOperation_Key']//option[1]").get_attribute('text')
返回'Age Harden',但是,当我在一个不是列表中第一个的操作(如'Zoo Treatment'上)上测试它时,它失败了-它仍然返回'Age Harden'

非常感谢您的帮助和指点,谢谢!

使用
选择
类别:

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)

使用
选择
类:

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)
第一个\u选择的\u选项 返回此选择标记中的第一个选定选项(或正常选择中的当前选定选项)


看起来你很接近。要提取默认选中的文本内容
,可以使用
first\u selected\u 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"))
    
选择的第一个选项 返回此选择标记中的第一个选定选项(或正常选择中的当前选定选项)


看起来你很接近。要提取默认选中的文本内容
,可以使用
first\u selected\u 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"))
    

当我使用这些工具时,我会不断返回WebDriverObject,例如:
。我试图添加
.get\u attribute('value')
来获取文本,但它抛出了一个错误:
AttributeError:'Select'对象没有属性'get\u attribute'
-知道如何获取值而不是对象吗?下面是我试图分配给字典中一个键的代码行:
选择(WebDriverWait(driver,20)。直到(EC.element可点击((By.ID,'lstOperation'u Key')))。获取属性('value')
是否尝试选择或获取所选文本?没有。获取属性('value'))在我的代码中,它将返回None,因为
Select
类没有
get\u属性
method当我使用这些方法时,我会不断返回WebDriverObject,例如:
。我试图添加
。get\u属性('value'))
获取文本,但它抛出了一个错误:
AttributeError:“Select”对象没有属性“get\u attribute”
-知道如何获取值而不是对象吗?下面是我试图分配给字典中键的代码行:
选择(WebDriverWait(driver,20)。直到(EC.element\u可点击((By.ID,'lstOperation\u key'))))).get_属性('value')
是否尝试选择或获取所选文本?我的代码中没有.get_属性('value'),它将返回无,因为
select
类没有
get_属性
方法