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

如何用Selenium通过开头匹配字符串选择下拉列表中的地址选项?

解决Selenium下拉列表按门牌号/房屋名称部分匹配选择的问题

你的思路完全正确——确实需要遍历下拉列表的所有选项,通过部分匹配门牌号/房屋名称来定位正确地址,因为select_by_value()只会匹配option标签的value属性,而这个属性大概率不是你提取的门牌号(从你给出的下拉文本来看,选项的value可能是完整地址或后端生成的标识,而非单独的门牌号)。

具体实现步骤

  1. 先获取下拉列表的所有选项元素,放弃直接使用select_by_value()的思路;
  2. 遍历每个选项,检查选项文本是否以你的目标值(HNUM)开头(或者包含HNUM + 空格,避免混淆类似24和240这种情况);
  3. 找到匹配项后直接选择它即可。

修正后的代码示例

from selenium.webdriver.support.ui import Select

# 从表格获取并处理门牌号/房屋名称
HNUM = sheet['B1'].value.split()[0]

# 获取下拉列表并初始化Select对象
dropdown = browser.find_element_by_id('confirmAddressLookup')
address_select = Select(dropdown)

# 遍历所有选项查找匹配项
matched_option = None
for option in address_select.options:
    # 优先匹配开头(适配你提供的下拉文本格式)
    if option.text.strip().startswith(HNUM):
        matched_option = option
        break
    # 备选方案:如果门牌号可能带后缀(比如24A),可以匹配逗号前的部分
    # if HNUM in option.text.split(',')[0].strip():
    #     matched_option = option
    #     break

if matched_option:
    # 两种选择方式都可以,按需使用
    address_select.select_by_visible_text(matched_option.text)
    # matched_option.click()
else:
    print(f"未找到匹配地址:{HNUM}")

关键细节说明

  • 为什么用startswith()?看你给出的下拉文本,所有地址都是以房屋名称/门牌号开头的(比如THE LONG MILL, ...、24 ROCHDALE ROAD, ...),开头匹配最准确,能避免误匹配;
  • 如果你的场景中门牌号可能出现在文本其他位置,可以改成拆分逗号取第一部分(即地址的最前半段)再判断是否包含HNUM;
  • 加入“未找到匹配”的分支,能避免代码因匹配失败直接报错,方便调试。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 09:21:01