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

Selenium 4.33.0中find_elements为何不支持RelativeBy?官方示例代码无法运行问题咨询

Selenium 4.33.0中find_elements为何不支持RelativeBy?官方示例代码无法运行问题咨询

太懂这种官方示例跑不起来的无语感了!我之前在升级到Selenium 4.20+版本的时候也碰到过一模一样的问题,折腾了半天才搞明白来龙去脉😮‍💨

问题根源:API版本迭代导致文档与当前实现不匹配

你看到的官方文档示例是基于Selenium 4早期版本(比如4.0.x到4.3.x)的API编写的,那时候find_elements/find_element方法允许直接传入RelativeBy对象作为参数。但从Selenium 4.4.0开始,官方对元素查找的API做了标准化重构,把find_elements的方法签名严格限定为只接受by(By枚举类型)和value(字符串或对应定位值)两个参数——这就是你查看源码时看到的那个签名,所以直接传RelativeBy对象就会触发IDE警告和运行报错,旧文档的写法已经不兼容当前版本的API了。

正确的修复写法

在Selenium 4.33.0中,要使用相对定位器,你需要把locate_with生成的RelativeBy对象作为value参数,配合By.RELATIVE枚举值传入find_elements,调整后的代码如下:

from selenium.webdriver.common.by import By
from selenium.webdriver.support.relative_locator import locate_with

# 先定位基准元素
lowest = driver.find_element(By.ID, "below")
# 生成相对定位器
relative_locator = locate_with(By.CSS_SELECTOR, "p").above(lowest)
# 用By.RELATIVE指定定位方式,传入相对定位器作为value
elements = driver.find_elements(by=By.RELATIVE, value=relative_locator)

额外小提示

如果你实在想沿用文档里的简洁写法,可以暂时降级到Selenium 4.3.0及以下版本,但非常不推荐——毕竟新版本修复了很多旧版本的bug和安全问题。更稳妥的方式是跟着当前版本的API调整写法,避免后续版本升级再踩同样的坑。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.07 12:24:32