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

Selenium如何优先查找指定元素ID,不存在时再查找另一ID的实现方案

实现方案

核心逻辑

将两个可能的元素ID按优先级存入列表,遍历列表逐个尝试定位元素,定位成功就直接执行后续操作,所有ID都尝试失败后再做异常处理。相比原代码全捕获异常直接忽略的写法,该逻辑容错性更高,也便于后续问题排查。

前置依赖导入

需要先引入Selenium的元素不存在异常类:

from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.common.keys import Keys
import time

修改后完整代码

try:
    time.sleep(5)
    # 按优先级排序目标ID,优先查找第一个
    target_id_list = ["s2id_ddlHotels", "s2id_ddlHotelsWithDate"]
    target_hotel_elem = None
    
    # 循环尝试匹配元素
    for elem_id in target_id_list:
        try:
            target_hotel_elem = driver.find_element_by_id(elem_id)
            break
        except NoSuchElementException:
            continue
    
    # 所有ID都未找到时抛出异常
    if not target_hotel_elem:
        raise Exception("未匹配到可用的酒店选择元素")
    
    # 执行后续固定操作
    target_hotel_elem.click()
    time.sleep(2)
    driver.find_element_by_id('s2id_autogen1_search').send_keys(hotelName)
    time.sleep(2)
    driver.find_element_by_id('s2id_autogen1_search').send_keys(Keys.RETURN)
    time.sleep(2)
    driver.find_element_by_name("fileRoomIncomeName").send_keys(fileName)
    time.sleep(2)
    element = driver.find_element_by_class_name("fileupload-preview")
    driver.execute_script(f"arguments[0].innerText = '{fileName}'", element)
except Exception as e:
    print(f"执行出错:{e}")

可选优化

如果希望减少硬等待提升执行效率,可以替换为Selenium显式等待,元素加载完成后会立即执行操作,不需要固定等待时长:

# 额外导入显式等待依赖
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

# 查找元素部分替换为如下写法,最长等待10秒
wait = WebDriverWait(driver, 10)
target_id_list = ["s2id_ddlHotels", "s2id_ddlHotelsWithDate"]
target_hotel_elem = None
for elem_id in target_id_list:
    try:
        target_hotel_elem = wait.until(EC.element_to_be_clickable((By.ID, elem_id)))
        break
    except:
        continue

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 12:39:03