You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Selenium选择动态ID和Name的下拉框选项

问题

需要点击网页中的出生日期下拉框并选择指定选项,但每次加载页面时下拉框的id和name是随机值,无法通过这两个属性定位。网页HTML结构如下:

<span class="float-left d-sm-flex align-items-sm-center"
    style="width: 100%;font-size: 13px;line-height: 20px;color: #6b747d;height: 20px;">* Date of birth:</span>
<p></p>
    
<select class="border rounded-0 form-control form-control-sm" type="text" name="xrbzm" required=""
    style="font-size: 12px;height: 2%;margin-bottom: 2%;width: 25%!important;float:left;" id="xrbzm1">
    <option value="" disabled="" selected="">Day</option>
    <option value="1">1</option>
    <option value="2">2</option>
    <option value="3">3</option>
    <option value="4">4</option>
    <option value="5">5</option>
    <option value="6">6</option>
    <option value="7">7</option>
    <option value="8">8</option>

</select>

<select class="border rounded-0 form-control form-control-sm" type="text" name="tzkrv" required=""
    style="font-size: 12px;height: 2%;margin-bottom: 2%;width: 45%!important;float:left;" id="tzkrv1">
    <option value="" disabled="" selected="">Month</option>
    <option value="01">January</option>
    <option value="02">February</option>
    <option value="03">March</option>
    <option value="04">April</option>
    <option value="05">May</option>
    <option value="06">June</option>
    <option value="07">July</option>
    <option value="08">August</option>
    <option value="09">Septmeber</option>
    <option value="10">October</option>
    <option value="11">November</option>
    <option value="12">Dicember</option>
</select>

<select class="border rounded-0 form-control form-control-sm" type="text" name="eawfb" required=""
    style="font-size: 12px;height: 2%;margin-bottom: 2%;width: 30%!important;float:left;" id="eawfb1">
    <option value="" disabled="" selected="">Year</option>
    <option value="2005">2005</option>
    <option value="2004">2004</option>
    <option value="2003">2003</option>
    <option value="2002">2002</option>
    <option value="2001">2001</option>
    <option value="2000">2000</option>
    <option value="1999">1999</option>
    <option value="1998">1998</option>
</select>

尝试的代码无效:

day = 6
month = 'May'
Year = 1999

driver.find_elements_by_xpath("//*[@class='border rounded-0 form-control form-control-sm']").click()
driver.find_element_by_xpath("/option[text()='"+str(day)+"']").click()
driver.find_element_by_xpath("//input[@placeholder='day']").click()

求不使用ID或NAME选择器的解决方案。

解决方案

针对原生<select>下拉框,推荐使用Selenium内置的Select类来操作,比直接点击更稳定。以下是可行的定位和操作方式:

1. 定位下拉框的核心思路

因为三个下拉框的类名相同,需要通过上下文特征区分:

  • 第一个下拉框(Day):紧邻“Date of birth”文本的<span>之后
  • 第二个下拉框(Month):默认选项文本为“Month”
  • 第三个下拉框(Year):默认选项文本为“Year”

2. 完整代码示例

from selenium.webdriver.support.ui import Select
from selenium.webdriver.common.by import By

day = 6
month = 'May'
year = 1999

# 定位Day下拉框:通过相邻的Date of birth文本定位
day_select = Select(driver.find_element(By.XPATH, "//span[contains(text(), 'Date of birth')]/following-sibling::p/following-sibling::select[1]"))
day_select.select_by_visible_text(str(day))

# 定位Month下拉框:通过默认选项的文本定位
month_select = Select(driver.find_element(By.XPATH, "//select[./option[text()='Month']]"))
month_select.select_by_visible_text(month)

# 定位Year下拉框:通过默认选项的文本定位
year_select = Select(driver.find_element(By.XPATH, "//select[./option[text()='Year']]"))
year_select.select_by_visible_text(str(year))

3. 原代码的问题说明

  • find_elements_by_xpath返回元素列表,不能直接调用.click(),需取对应索引的元素
  • /option[text()='6']的XPath路径错误,缺少父级节点,正确写法为//select/option[text()='6']
  • 页面中不存在placeholder='day'的<input>元素,最后一行代码无效

内容的提问来源于stack exchange,提问作者Fabix

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 16:10:26