• 解决:AttributeError: ‘WebDriver‘ object has no attribute ‘find_element_by_id‘


    解决:AttributeError: ‘WebDriver’ object has no attribute ‘find_element_by_id’

    背景

    在使用之前的代码通过selenium定位元素时,报错:selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {“method”:“id”,“selector”:“//*[text()=“编辑封面”]”}
    (Session info: chrome=119.0.6045.124)

    报错问题

    File "D:\develop\python\Python3\Python37\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 861, in find_element
        return self.execute(Command.FIND_ELEMENT, {"using": by, "value": value})["value"]
      File "D:\develop\python\Python3\Python37\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 444, in execute
        self.error_handler.check_response(response)
      File "D:\develop\python\Python3\Python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 249, in check_response
        raise exception_class(message, screen, stacktrace)
    selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"id","selector":"//*[text()="编辑封面"]"}
      (Session info: chrome=119.0.6045.124)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    截图如下:
    在这里插入图片描述

    报错翻译

    主要报错信息内容翻译如下所示:
    selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {“method”:“id”,“selector”:“//[text()=“编辑封面”]“}
    (Session info: chrome=119.0.6045.124)
    翻译:
    selenium.common.exceptions.NoSuchElementException:消息:没有这样的元素:无法定位元素
    :{“method”:“id”,“selector”:”//
    [text()=“编辑封面”]”}
    (Session info: chrome=119.0.6045.124)

    报错原因

    经过查阅资料,发现这个报错是由于Selenium更新到新版本(4.x版本)后,以前的一些常用的代码的语法发生了改变,当然如果没有更新过或是下载最新版本的Selenium是不受到影响的,还可以使用以前的写法。

    小伙伴们按下面的解决方法即可解决!!!

    解决方法

    由于新旧版本的语法发生了改变,有两种解决方法。
    方法一:使用或恢复(4.x版本)之前的版本
    也就是使用或恢复Selenium版本到(4.x版本)之前的版本

    方法二:修改代码的语法为新版本的语法
    旧版本语法

    inputTag = driver.find_element_by_id("value")  # 利用ID查找
    
    • 1

    新版本语法

    # inputTag = driver.find_element_by_id("value")  # 利用ID查找
    # 改为:
    inputTag = driver.find_element(By.ID, "value")
    
    • 1
    • 2
    • 3

    扩展:

    # inputTag = driver.find_element_by_id("value")  # 利用ID查找
    # 改为:
    inputTag = driver.find_element(By.ID, "value")
    
    # inputTags = driver.find_element_by_class_name("value")  # 利用类名查找
    # 改为:
    inputTag = driver.find_element(By.CLASS_NAME, "value")
    
    # inputTag = driver.find_element_by_name("value")  # 利用name属性查找
    # 改为:
    inputTag = driver.find_element(By.NAME, "value")
    
    # inputTag = driver.find_element_by_tag_name("value")  # 利用标签名查找
    # 改为:
    inputTag = driver.find_element(By.TAG_NAME, "value")
    
    # inputTag = driver.find_element_by_xpath("value")  # 利用xpath查找
    # 改为:
    inputTag = driver.find_element(By.XPATH, "value")
    
    # inputTag = driver.find_element_by_css_selector("value")  # 利用CSS选择器查找
    # 改为:
    inputTag = driver.find_element(By.CSS_SELECTOR, "value")
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24


    今天的分享就到此结束了

    欢迎点赞评论关注三连

    在这里插入图片描述

  • 相关阅读:
    JavaWeb
    java —— 打印流
    Pytest UI自动化测试实战实例
    关于asio2项目example目录中的几个tcp示例的说明
    Stable Diffusion算法、结构全流程概述
    一次MongoDB查询优化历程
    Mac M1 Datasophon 安装
    WPF界面设计工具---Blend学习(一)
    python语言常见面试题:如何在Python中实现列表的切片操作?
    middlebury立体匹配评估使用方法总结(一)
  • 原文地址:https://blog.csdn.net/nings666/article/details/134317417