使用 python selenium 从下拉菜单中选择一个始终更改值的选项

分享于2022年07月17日 dropdown python selenium 问答
【问题标题】:使用 python selenium 从下拉菜单中选择一个始终更改值的选项(Using python selenium to choose an option from a dropdown menu with always changing values)
【发布时间】:2022-01-27 07:37:19
【问题描述】:

我正在努力编写代码。

我想从下拉菜单中选择一个选项,但选项的值总是不同的。

我正在使用我在这里找到的这个伪代码:

driver.find_element_by_xpath("//option[text()="Some text"]").click()

这暂时有效,但“某些文本”总是在变化,具体取决于日期。

这是下拉菜单的 HTML(见附图)。如上所述,日期的值会发生变化,但是当我尝试将其自动化以每天运行一次时,日期总是会发生变化(显然)。

Using python selenium to choose an option from a dropdown menu with always changing values

我该如何解决这个问题?假设我想始终选择下午 6:30 选项?

提前致谢。

  • 好像是 <select> 标签,你试过 Select() 类吗?

【解决方案1】:

你可以像这样获取元素(python示例):

from datetime import datetime, timedelta

object_time = datetime.today().replace(hour=6, minute=30, second=0)
object_name = object_time.strftime("%Y-%m-%d %H:%M:%S")

driver.find_element_by_xpath(f"//option[value='{object_name}']").click()

  • 我明白了。这可能会奏效。但我想总是提前 2 天预订选项。因此,如果我今天运行代码,它应该在 31 日运行,如果我明天运行它,它应该在 1 日运行。我希望这是有道理的。您对此有解决方案吗?提前致谢。
  • 只需将 2 天添加到 object_time 。在第 3 行末尾添加以下内容 + timedelta(days=2) 。这里是整行: object_time = datetime.today().replace(hour=6, minute=30, second=0) + timedelta(days=2)
  • 谢谢,到目前为止它有效,但是当我尝试这个时,不知何故我收到了这条消息:selenium.common.exceptions.NoSuchElementException:消息:没有这样的元素:无法找到元素:{“方法”: "xpath","selector":"//option[value='2021-12-30 18:30:00']"} (Session info: chrome=96.0.4664.110) 虽然值正好是 "2021-12- 30 点 18 点 30 分 00 秒”。为什么现在找不到了?
  • 这是我尝试从下拉菜单中选择的代码部分: dropdown = driver.find_element(By.CLASS_NAME, "input-group") dropdown.click() #time.sleep(1) object_time = datetime.today().replace(hour=18, minute=30, second=0) + timedelta(days=1) object_name = object_time.strftime("%Y-%m-%d %H:%M:%S") driver.find_element_by_xpath(f"//option[value='{object_name}']").click()
  • 当我使用此代码时它起作用了: driver.find_element_by_xpath("//option[text()='8:30pm Thu Dec 30th 2021']").click() 但是我在更改文本时遇到了同样的问题