find_element_by_* 命令在 Selenium 中已弃用

2024-05-21

启动功能时

def run(driver_path):
    driver = webdriver.Chrome(executable_path=driver_path)
    driver.get('https://tproger.ru/quiz/real-programmer/')
    button = driver.find_element_by_class_name("quiz_button")
    button.click()
run(driver_path)

我收到这样的错误:

<ipython-input-27-c5a7960e105f>:6: DeprecationWarning: executable_path has been deprecated, please pass in a Service object
  driver = webdriver.Chrome(executable_path=driver_path)
<ipython-input-27-c5a7960e105f>:10: DeprecationWarning: find_element_by_* commands are deprecated. Please use find_element() instead
  button = driver.find_element_by_class_name("quiz_button")

...但我不明白为什么。

我在用着网络驱动程序 https://en.wikipedia.org/wiki/Selenium_(software)#Selenium_WebDriver我的 Chrome 版本的最新版本。我不知道为什么我得到

find_element_by_* commands are deprecated

...当文档中存在该命令时。


这个错误信息...

DeprecationWarning: find_element_by_* commands are deprecated. Please use find_element() instead

...意味着find_element_by_*命令在最新的 Selenium Python 库中已弃用。

As AutomatedTester 提到 https://github.com/SeleniumHQ/selenium/issues/8806#issuecomment-711947184: This 弃用警告是对简化跨语言 API 的决定所做的更改的反映,而这就是这样做的。


Solution

相反,你必须使用find_element()。举个例子:

您必须包含以下导入内容

from selenium.webdriver.common.by import By
  • Using class_name:

    button = driver.find_element_by_class_name("quiz_button")
    

    需要替换为:

    button = driver.find_element(By.CLASS_NAME, "quiz_button")
    

除此之外,您还必须更改以下内容:

  • Using id:

    element = find_element_by_id("element_id")
    

    需要替换为:

    element = driver.find_element(By.ID, "element_id")
    
  • Using name:

    element = find_element_by_name("element_name")
    

    需要替换为:

    element = driver.find_element(By.NAME, "element_name")
    
  • Using link_text:

    element = find_element_by_link_text("element_link_text")
    

    需要替换为:

    element = driver.find_element(By.LINK_TEXT, "element_link_text")
    
  • Using partial_link_text:

    element = find_element_by_partial_link_text("element_partial_link_text")
    

    需要替换为:

    element = driver.find_element(By.PARTIAL_LINK_TEXT, "element_partial_link_text")
    
  • Using tag_name:

    element = find_element_by_tag_name("element_tag_name")
    

    需要替换为:

    element = driver.find_element(By.TAG_NAME, "element_tag_name")
    
  • Using css_selector:

    element = find_element_by_css_selector("element_css_selector")
    

    需要替换为:

    element = driver.find_element(By.CSS_SELECTOR, "element_css_selector")
    
  • Using xpath:

    element = find_element_by_xpath("element_xpath")
    

    需要替换为:

    element = driver.find_element(By.XPATH, "element_xpath")
    

Note:如果您正在搜索和替换以实现上述更改,则需要对find_elements_*,即复数形式find_element_*.

您可能还会发现此升级指南很有用,因为它涵盖了升级时可能需要进行的一些其他不相关的更改:升级到 Selenium 4 https://www.selenium.dev/documentation/webdriver/getting_started/upgrade_to_selenium_4/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

find_element_by_* 命令在 Selenium 中已弃用 的相关文章

随机推荐

  • hier_block 的行为与 GNU Radio 中的sync_block 的行为究竟有何不同?

    这是一个延续this https stackoverflow com questions 30639668 is it possible to access work functions variable in init of a gnu
  • git 推送到 github 失败并显示“错误:pack-objects 因信号 967 死亡”

    我触发了这个命令 git push origin master 我得到这个结果 Counting objects 15626 done Delta compression using up to 4 threads error pack o
  • 为什么使用闭包进行赋值而不是直接将值赋给键?

    我当时正在看在 7 10 他添加了一个数据库依赖项并使用闭包来分配值 我的问题是为什么不直接使用直接赋值 我的意思是不这样做 container db capsule 相当于这样做 container db function contain
  • 如何使用retrofit2进行GET请求?

    我有一个在本地主机上运行的安静的 Web 服务 我想在该剩余 URL 上发出 Retrofit2 GET 请求 MainActivity java private void requestData public static final S
  • GWT 身份验证和用户信息访问

    只是想知道我的以下身份验证方法是否正确 有没有什么陷阱或者遗漏的地方 非常欢迎建议和讨论 1 gt 用户提供用户名和密码 并通过RPC发送到服务器 与数据库中存储的哈希值进行比较 2 gt 假设用户名和密码准确 会话中会保存一个Auth T
  • 在服务器端生成 HTML Canvas 图像数据?

    这个问题的标题可能有点误导 但我不确定最好的标题是什么 因为我还无法猜测解决方案 基本上我正在开发的系统很大程度上依赖于画布图 这些图表是通过 javascript 生成的 并使用通过 ajax 从 API 服务器提取的数据制作 棘手的部分
  • 使用自动布局约束时如何获取视图的当前宽度和高度?

    我不是在谈论frame属性 因为从中你只能得到xib中视图的大小 我说的是当视图由于其约束而调整大小时 可能在旋转之后 或响应事件 有没有办法获取当前的宽度和高度 我尝试迭代其约束来寻找宽度和高度约束 但这不是很干净 并且在存在内在约束时会
  • Android Manifest 自动生成无效权限

    我不小心在 Android 清单中输入了无效的权限名称 并且无法将其删除 这是我的清单代码
  • 在这种情况下,scala 的类型检查是如何工作的? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 Start writing your ScalaFiddle code here sealed trait DSL A def run
  • 如何正确设置 statsmodels.tsa.ar_model.AR.predict 函数的开始/结束参数

    我有一个来自不规则间隔时间序列的项目成本数据框 我想尝试应用该数据框statsmodelAR模型对抗 http www statsmodels org stable generated statsmodels tsa ar model AR
  • 仅在第一次访问页面时显示 jQuery 弹出窗口

    我是新来的jQuery http en wikipedia org wiki JQuery 我的网站上有一些需求 我想仅在用户到来时才第一次显示 jQuery div 弹出窗口 无需一次又一次地展示 我仍然在使用这个 但我不知道第二次如何隐
  • 使用哈希时 fetch 与 [] ? [复制]

    这个问题在这里已经有答案了 来自鲁比 科恩斯about hashes rb 为什么你可能想使用 fetch代替 当访问哈希键时 默认情况下 使用 如果存在则检索哈希值 如果不存在则返回 nil Using fetch给你一些选择 请参阅文档
  • 如何在基于 Linux 的系统上的 C 程序中使用 mqueue?

    如何在基于 Linux 的系统上的 C 程序中使用 mqueue 消息队列 我正在寻找一些好的代码示例 可以展示如何以正确且正确的方式完成此操作 也许是一个操作指南 下面是一个服务器的简单示例 该服务器接收来自客户端的消息 直到收到告诉其停
  • 如何以编程方式确定哪些数据存储区索引有错误?

    当我跑步时更新索引在 Google 数据存储上我收到以下消息 它告诉我通过查看 GUI 来确定哪些索引有错误 然后删除这些索引 我的 200 个索引中有 51 个错误 从 GUI 中复制它们是不可行的 编辑 通过费力地从 datastore
  • Delphi:现场记录应用程序错误

    使用 Delphi 7 我想知道是否有一个免费组件可以在我的应用程序在远程站点运行时收集诊断信息并帮助我调试错误报告 也许它会记录每个选择的菜单项 单击的控件 文本输入等 也许它只是在崩溃时转储堆栈 也许它还有其他作用 我不介意添加代码 例
  • 帮助我理解FFT函数(Matlab)

    1 除了负频率之外 FFT 函数提供的最小频率是多少 是零吗 2 如果它为零 我们如何在对数刻度上绘制零 3 结果总是对称的 或者只是看起来是对称的 4 如果我使用abs fft y 来比较2个信号 我是否会失去一些准确性 1 除了负频率之
  • 在pygame中旋转矩形(不是图像)

    在 pygame 中我使用pygame draw rect screen color rectangle 对于我的程序中的所有矩形 我希望能够将这些矩形旋转到任何角度 我看过下面的代码来旋转IMAGES但我的问题是矩形 pygame tra
  • 在 Vim 中隐藏所有(不)匹配的行

    是否可以在 vi 或 Vim 中显示 隐藏所有匹配行 不突出显示 而只显示那些行 例如 我有一个带有单词单词的文本ERROR 如何让它只显示包含以下内容的行ERROR以及如何只显示线条而不显示ERROR 有解决办法吗不删除所有匹配的行然后撤
  • OPENGL ES 不工作:无当前上下文

    我尝试了 OpenGL ES2 for Android 一书中所示的程序 但它不起作用 我已经在Odroid E 三星s3 三星y 三星star上进行了测试 the gl version suported returns 2 but i g
  • find_element_by_* 命令在 Selenium 中已弃用

    启动功能时 def run driver path driver webdriver Chrome executable path driver path driver get https tproger ru quiz real prog