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

如何忽略Selenium中FindElement()方法抛出的异常?

处理Selenium FindElement抛出异常的实用方案

嘿,我来帮你搞定这个问题~你遇到的情况很典型:目标取消按钮是隐藏元素,调用FindElement时要么找不到元素,要么元素不可交互,直接抛出异常打断程序。下面给你两种实用的处理方式,都能实现忽略异常的需求:

方法一:用try-catch捕获并忽略特定异常

这是最直接的思路,把可能出问题的代码放进try块,然后捕获对应的异常,啥也不做(或者记个日志),让程序继续跑就行。

给你改好的代码:

IWebDriver driver;
driver = new ChromeDriver();
driver.Url = "https://upbit.com/exchange?";

try
{
    // 尝试点击那个隐藏的取消按钮
    driver.FindElement(By.CssSelector("table>tbody>tr>td:nth-child(6)>a")).Click();
}
catch (NoSuchElementException)
{
    // 元素不存在?没关系,跳过就行
}
catch (ElementNotInteractableException)
{
    // 元素存在但不可交互(比如隐藏状态)?也跳过
}

小提示:尽量捕获具体的异常类型(比如上面的两种),别直接抓WebDriverException这种大的,不然可能会不小心忽略其他真正需要关注的问题。

方法二:先检查元素是否存在再操作

用FindElements(注意是复数形式)来查找元素,这个方法不会抛出异常,找不到元素就返回空列表。我们先判断列表里有没有元素,有再尝试点击,同时处理可能的交互异常。

示例代码:

IWebDriver driver;
driver = new ChromeDriver();
driver.Url = "https://upbit.com/exchange?";

// 先找到所有匹配的取消按钮
var cancelButtons = driver.FindElements(By.CssSelector("table>tbody>tr>td:nth-child(6)>a"));
if (cancelButtons.Count > 0)
{
    try
    {
        // 点击第一个找到的按钮
        cancelButtons[0].Click();
    }
    catch (ElementNotInteractableException)
    {
        // 元素是隐藏的点不了?忽略就好
    }
}

这种方式更稳妥,先避免了“元素不存在”的异常,再处理“元素存在但没法点”的情况,适合对稳定性要求高的场景。

额外提醒

因为你的目标元素是隐藏状态,就算找到了元素,Click()也大概率会抛出ElementNotInteractableException,所以两种方法里都特意加了对这个异常的捕获哦。

内容的提问来源于stack exchange,提问作者김다빈

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:21:46