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
相关产品推荐
相关产品推荐

