创建 Python 函数以使用 Selenium 选择多个下拉列表:无法找到具有可见文本的元素

Creating Python Functions to Select Multiple Drop Downs w/ Selenium: Could not locate element with visible text

提问人:invader_zimmy 提问时间:11/16/2023 更新时间:11/16/2023 访问量:35

问:

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

我正在使用 Selenium 填写包含各种下拉列表的 Web 表单。我试图通过创建一个函数来实现这一点,该函数可以查找元素,并使用该功能选择值。"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

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

python-3.x selenium-chromedriver

评论


答:

0赞 Gabriel Ramuglia 11/16/2023 #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/

评论

1赞 invader_zimmy 11/16/2023
明白了,我现在就去看看。谢谢!
1赞 invader_zimmy 11/17/2023
再次感谢@GabrielRamuglia它就像一个魅力!你的文章帮了大忙!
0赞 Gabriel Ramuglia 11/17/2023
棒!很高兴听到它!