代码之家  ›  专栏  ›  技术社区  ›  invader_zimmy

创建Python函数以使用Selenium选择多个下拉菜单:找不到具有可见文本的元素

  •  0
  • invader_zimmy  · 技术社区  · 1 年前

    这是我的第一篇Stack Overflow帖子,所以请放心!

    我正在使用Selenium来填写一个包含各种下拉列表的网络表单。我试图通过创建一个函数来实现这一点,该函数查找元素,并使用 "select_by_visible_text" 功能。

    我创建了两个列表,一个列表包含元素,另一个列表则包含需要在每个下拉列表中选择的值。

    以下是我尝试使用的功能:

    def dropdown_select(element_list, selection_list):
        for element in element_list:
            find_element = driver.find_element(By.ID, element)
            find_element.click()
            for selection in selection_list:
                select = Select(find_element)
                select.select_by_visible_text(selection)
    

    问题是,在正确选择第一个下拉列表后,它无法找到第二个下拉列表选择的值,这会引发以下错误:

    selenium.common.exceptions.NoSuchElementException: Message: Could not locate element with visible text: Semester Units

    在过去的几天里,我一直在确保列表中有正确的元素ID和正确的可见文本。正如您在上面的错误中看到的那样,脚本很难找到值。我已经检查了该元素多次,以确保它是正确的文本,但我仍然收到相同的错误。

    此外,我尝试使用来选择下拉选项 select_by_value 但我仍然收到同样的错误。

    我也尝试过使用隐式等待,但它仍然没有找到值。

    1 回复  |  直到 1 年前
        1
  •  0
  •   Gabriel Ramuglia    1 年前

    问题是,您的函数试图将selection_list中的所有选择应用于element_list中的每个元素,而不是将每个元素与其相应的选择相匹配。您应该使用zip同时遍历这两个列表。

    请尝试以下操作:

    from selenium.webdriver.support.ui import Select
    from selenium.webdriver.common.by import By
    
    def dropdown_select(element_list, selection_list):
        for element, selection in zip(element_list, selection_list):
            select_element = Select(driver.find_element(By.ID, element))
            select_element.select_by_visible_text(selection)
    

    来源:我的文章 https://ioflood.com/blog/python-zip-function/