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

Selenium WebDriver如何点击两个元素中最先出现的那个?

解决Selenium点击最先出现的两个元素之一的问题

原代码的核心问题是使用了locator or locator2这种Python逻辑或,它只会返回第一个有效的定位器,导致WebDriverWait只会等待第一个元素,只有当第一个元素超时未出现时才会结束等待,不会同时监听第二个元素的状态。

要实现任意一个元素显示就立即点击的需求,需要用Selenium的EC.or_条件组合两个元素的可见性检查,让WebDriverWait同时监听两个元素的状态,只要其中一个满足可见条件就立即触发操作。

修正后的代码如下:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

class SeleniumExtended:
    def __init__(self, driver):
        self.driver = driver
        self.default_timeout = 15

    def wait_and_click_on_1_of_2_elements(self, locator, locator2, timeout=None):
        timeout = timeout if timeout else self.default_timeout

        # 组合两个可见性条件,任意一个满足就返回对应元素
        element = WebDriverWait(self.driver, timeout).until(
            EC.or_(
                EC.visibility_of_element_located(locator),
                EC.visibility_of_element_located(locator2)
            )
        )
        element.click()

关键说明:

  • EC.or_(*conditions):该方法会接收多个预期条件,只要其中任意一个条件满足,就会立即返回对应的元素,而不是等待所有条件或按顺序等待。
  • 轮询机制:WebDriverWait默认每隔0.5秒检查一次条件,所以只要两个元素中有一个在超时时间内变为可见,就会立刻被点击,无需等待第一个元素超时。
  • 如果需要等待元素可点击而非仅可见,可以将visibility_of_element_located替换为element_to_be_clickable,根据实际需求调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 05:22:12