• Selenium基础 — Selenium元素定位(一)


    1、什么是元素定位

    • 元素定位就是查找HTML元素的过程。
    • HTML元素指的是从开始标签(start tag)到结束标签(end tag)的所有代码。
    • 操作页面元素之前,首先要对元素进行定位,所以定位是自动化脚本编写的开始。
    • 通常使用find_elementfind_elements 方法来定位元素。
      • find_element使用给定的方法定位和查找一个元素
      • find_elements使用给定的方法定位和查找所有元素,并以列表(list)的形式返回。

    2、Selenium元素定位常用API

    (1)By_id

    说明:

    当所定位的元素具有id属性的时候我们可以通过by_id来定位该元素。

    例如:打开百度首页,定位搜索框。

    搜索框页面源代码:属性id值为kw。

    <input type="text" class="s_ipt" name="wd" id="kw" maxlength="255" autocomplete="off">
    

    示例:

    1. """
    2. 1.学习目标
    3. 必须掌握selenium中元素定位方法,id定位方法
    4. 2.操作步骤(语法)通过元素id属性定位
    5. driver.find_element_by_id(id属性的值)
    6. 3.需求
    7. 在百度页面中使用id属性定位百度输入框
    8. """
    9. # 1.导入selenium
    10. from selenium import webdriver
    11. from time import sleep
    12. # 2.打开浏览器(获取浏览器对象)
    13. driver = webdriver.Chrome()
    14. # 3.输入网址
    15. url = "http://www.baidu.com"
    16. driver.get(url)
    17. sleep(2)
    18. # 4.元素定位(id定位方法),百度输入框
    19. """
    20. 注意:
    21. 如果有多个相同属性值的元素,单数形式,定位第一个.
    22. """
    23. srk = driver.find_element_by_id("kw")
    24. # 打印srk对象
    25. print(srk)
    26. # 查看元素对应的源码
    27. print(srk.get_attribute("outerHTML"))
    28. # 5.关团浏览器
    29. driver.quit()
    30. """
    31. 输出结果:
    32. (session="6fbad6d63614e1cae6cd346153a7105e",
    33. element="0dd374b6-74ed-4f4c-b610-5c772fd8c366")>
    34. 我们可以看到srk是一个WebElement类型的对象。
    35. 查看元素对应的源码如下:
    36. " name="wd" class="s_ipt" value="" maxlength="255" autocomplete="off">
    37. 说明我们已经把百度首页的输入框获取到了。
    38. """

    复数形式:

    1. """
    2. 学习目标
    3. 复数形式
    4. 复数定位形式:driver.find_elements_XXX
    5. 复数定位,返回的列表类型数据
    6. 遍历列表操作具体元素
    7. """
    8. # 1.导入selenium
    9. from selenium import webdriver
    10. from time import sleep
    11. # 2.打开浏览器
    12. driver = webdriver.Chrome()
    13. # 3.输入网址
    14. url = "http://www.baidu.com"
    15. driver.get(url)
    16. sleep(2)
    17. # 4.通过by_id复数定位
    18. srk = driver.find_elements_by_id("kw")
    19. # 5.查看返回结果数据类型
    20. print("结果数据类型", type(srk))
    21. print("元素个数", len(srk))
    22. # 6.遍历结果,查看源码
    23. for i in srk:
    24. # 查看元素对应的源码
    25. print(i.get_attribute("outerHTML"))
    26. # 7.关团浏览器
    27. driver.quit()
    28. """
    29. 结果数据类型
    30. 元素个数 1
    31. """

    异常总结:

    1. 异常1
    2. AttributeError:'list' object has no attribute 'get_attribute'
    3. 表示定位元素返回的是一个列表格式,原因:使用复数定位方式 find_elements获取的定位
    4. 异常2
    5. NoSuchElementException :
    6. 表示元素没找到元素,原因是定位方式出现问题,有一种情况是属性值写错了。

    (2)by_name

    说明:

    当所定位的元素具有name属性的时候,我们可以通过by_name来定位该元素。

    如上图中的百度搜索页面

    搜索框页面源代码:属性name值为wd

    <input id="kw" name="wd" class="s_ipt" value="" maxlength="255" autocomplete="off">
    

    示例:

    使用name属性定位百度搜索框

    1. """
    2. 1.学习目标:
    3. 必须掌握selenium的元素定位方法by_name
    4. 2.语法
    5. name定位
    6. driver.find_element_by_name(name属性的值)
    7. 3.需求
    8. 使用name属性定位百度搜索框
    9. 4.总结
    10. 当元素中有name属性时才能使用上述定位方法
    11. """
    12. # 1.导入selenium
    13. from selenium import webdriver
    14. from time import sleep
    15. # 2.打开浏览器(获取浏览器对象)
    16. driver = webdriver.Chrome()
    17. # 3.输入网址
    18. url = "http://www.baidu.com"
    19. driver.get(url)
    20. sleep(2)
    21. # 4. 使用name定位百度搜索框
    22. """
    23. 注意:
    24. 如果有多个相同属性值的元素,单数形式,定位第一个.
    25. """
    26. srk = driver.find_element_by_name("wd")
    27. # 打印srk对象
    28. print(srk)
    29. # 打印定位元素所在行的源码
    30. print(srk.get_attribute("outerHTML"))
    31. # 5.关闭浏览器
    32. driver.quit()
    33. """
    34. 输出结果:
    35. (session="3149d334336f0eab9e4d8d394e4efd72",
    36. element="0.1359081202533734-1")>
    37. " name="wd" class="s_ipt" value="" maxlength="255" autocomplete="off">
    38. """

    复数形式:

    1. """
    2. 学习目标
    3. 复数形式
    4. 复数定位形式:driver.find_elements_XXX
    5. 复数定位,返回的列表类型数据
    6. 遍历列表操作具体元素
    7. """
    8. # 1.导入selenium
    9. from selenium import webdriver
    10. from time import sleep
    11. # 2.打开浏览器
    12. driver = webdriver.Chrome()
    13. # 3.输入网址
    14. url = "http://www.baidu.com"
    15. driver.get(url)
    16. sleep(2)
    17. # 4.通过by_id复数定位
    18. srk = driver.find_elements_by_name("wd")
    19. # 5.查看返回结果数据类型
    20. print("结果数据类型", type(srk))
    21. print("元素个数", len(srk))
    22. # 6.遍历结果,查看源码
    23. for i in srk:
    24. # 查看元素对应的源码
    25. print(i.get_attribute("outerHTML"))
    26. # 7.关团浏览器
    27. driver.quit()
    28. """
    29. 结果数据类型
    30. 元素个数 1
    31. """

    (3)by_class_name

    说明:

    当所定位的元素具有class属性的时候,我们可以通过by_class_name来定位该元素。

    搜索框页面源代码:属性classname值为s_ipt

    <input type="text" class="s_ipt" name="wd" id="kw" maxlength="255" autocomplete="off">
    

    示例:

    使用class属性定位百度搜索框

    1. """
    2. 1.学习目标:
    3. 必须掌握selenium的元素定位方法by_class_name
    4. 2.语法
    5. classname定位
    6. driver.find_element_by_class_name(class属性值)
    7. 3.需求
    8. 使用class属性定位百度搜索框
    9. 4.总结
    10. 当元素中有class属性时才能使用上述定位方法
    11. """
    12. # 1.导入selenium
    13. from selenium import webdriver
    14. from time import sleep
    15. # 2.打开浏览器(获取浏览器对象)
    16. driver = webdriver.Chrome()
    17. # 3.输入网址
    18. url = "http://www.baidu.com"
    19. driver.get(url)
    20. sleep(2)
    21. # 4. 使用name定位百度搜索框
    22. """
    23. 注意:
    24. 如果有多个相同属性值的元素,单数形式,定位第一个.
    25. """
    26. srk = driver.find_element_by_class_name("s_ipt")
    27. # 打印srk对象
    28. print(srk)
    29. # 查看元素对应的源码
    30. print(srk.get_attribute("outerHTML"))
    31. # 5.关闭浏览器
    32. driver.quit()
    33. """
    34. 输出结果:
    35. (session="e4f97a48e7f113e681950b62c7789966",
    36. element="0.5782514739919584-1")>
    37. " name="wd" class="s_ipt" value="" maxlength="255" autocomplete="off">
    38. """

    复数形式:

    1. """
    2. 学习目标
    3. 复数形式
    4. 复数定位形式:driver.find_elements_XXX
    5. 复数定位,返回的列表类型数据
    6. 遍历列表操作具体元素
    7. """
    8. # 1.导入selenium
    9. from selenium import webdriver
    10. from time import sleep
    11. # 2.打开浏览器
    12. driver = webdriver.Chrome()
    13. # 3.输入网址
    14. url = "http://www.baidu.com"
    15. driver.get(url)
    16. sleep(2)
    17. # 4.通过by_id复数定位
    18. srk = driver.find_elements_by_class_name("s_ipt")
    19. # 5.查看返回结果数据类型
    20. print("结果数据类型", type(srk))
    21. print("元素个数", len(srk))
    22. # 6.遍历结果,查看源码
    23. for i in srk:
    24. # 查看元素对应的源码
    25. print(i.get_attribute("outerHTML"))
    26. # 7.关团浏览器
    27. driver.quit()
    28. """
    29. 结果数据类型
    30. 元素个数 1
    31. """

    (4)by_tag_name

    说明:

    by_tag_name方法可以通过元素的标签名来查找元素。由于搜索到的标签名通常不止一个,所以一般结合使用find_elements方法来使用。

    假设页面中有一个bitton按钮

    <button type="submitA" value="注册A" title="加入会员A">注册用户A</button>
    

    示例:

    1. """
    2. 1.学习目标:
    3. 必须掌握selenium中tag_name定位方法
    4. 2.语法
    5. driver.find_element_by_tag_name(标签名) # 单数形式
    6. driver.find_elements_by_tag_name(标签名) # 定位一组标签名相同的元素
    7. 3.需求
    8. 在页面中,使用tag_name对按钮注册用户A定位
    9. """
    10. # 1.导入selenium
    11. from selenium import webdriver
    12. from time import sleep
    13. import os
    14. # 2.打开浏览器(获取浏览器对象)
    15. driver = webdriver.Chrome()
    16. # 3.打开注册A页面
    17. url = "file:///" + os.path.abspath("./练习页面/注册A.html")
    18. driver.get(url)
    19. sleep(2)
    20. # 4.使用tag_name定位按钮
    21. """
    22. 注意:
    23. 如果有多个相同标签的元素,单数形式,定位第一个.
    24. """
    25. button = driver.find_element_by_tag_name("input")
    26. print(button.get_attribute("outerHTML"))
    27. # 5.关闭浏览器
    28. sleep(2)
    29. driver.quit()
    30. """
    31. 输出结果:
    32. """

    复数形式:

    1. """
    2. 1.学习目标:
    3. 必须掌握selenium中tag_name定位方法
    4. 2.语法
    5. driver.find_element_by_tag_name(标签名) # 单数形式
    6. driver.find_elements_by_tag_name(标签名) # 定位一组标签名相同的元素
    7. 3.需求
    8. 在页面中,使用tag_name复数形式定位 input标签
    9. """
    10. # 1.导入selenium
    11. from selenium import webdriver
    12. from time import sleep
    13. import os
    14. # 2.打开浏览器
    15. driver = webdriver.Chrome()
    16. # 3.打开注册A页面
    17. url = "file:///" + os.path.abspath("./练习页面/注册A.html")
    18. driver.get(url)
    19. sleep(2)
    20. # 4.使用tag_name复数形式定位 input标签
    21. input_elements = driver.find_elements_by_tag_name("input")
    22. # 查看结果类型
    23. print(type(input_elements))
    24. print(len(input_elements))
    25. # 5.遍历列表打印每个元素的源码
    26. for element in input_elements:
    27. print(element.get_attribute("outerHTML"))
    28. # 6.关闭浏览器
    29. driver.quit()
    30. """
    31. 输出结果:
    32. 16
    33. " name="userA" id="userA" placeholder="账号A" required="" value="">
    34. " name="passwordA" id="passwordA" placeholder="密码A" value="">
    35. " name="telA" id="telA" placeholder="电话A" class="telA" value="">
    36. " name="emailA" id="emailA" placeholder="电子邮箱A" value="">
    37. ......等等
    38. """

    总结:

    tag_name定位:

    • 单数方式

      当页面中如果定位的标签是唯一的,可以直接使用tag_name方法定位。

      如果所定位的标签在页面中的索引位置是第一个,也可以用tag_name方法定位。

    • 复数形式

      复数定位形式:driver.find_elements_XXX

      复数定位,返回的列表类型数据。

      遍历列表操作具体元素。

    (5)by_link_text

    说明:

    by_link_text通过超文本链接上的文字信息来定位元素,这种方式一般专门用于定位页面上的超文本链接。

    例如打开百度首页,定位点击超链接地图。

    超链接地图源代码:

    <a class="mnav" name="tj_trmap" href="http://map.baidu.com">地图</a>
    

    示例:

    脚本代码需求:使用link_text定位百度首页地图链接

    1. """
    2. 1.学习目标:
    3. 必须掌握selenium中超链接的定位方法
    4. 2.语法
    5. link_text # 需要链接的全部文本
    6. driver.find_element_by_link_text(全部文本)
    7. 3.需求
    8. 在页面中,使用定位连接的方法,访问百度网站,定位点击超链接地图。
    9. """
    10. # 1.导入selenium
    11. from selenium import webdriver
    12. from time import sleep
    13. import os
    14. # 2.打开浏览器
    15. driver = webdriver.Chrome()
    16. # 3.打开页面
    17. url = "http://www.baidu.com"
    18. driver.get(url)
    19. sleep(2)
    20. # 4.使用link_text定位
    21. """
    22. 注意:
    23. """

    复数形式:

    1. # 定位一组标超链接文本全部内容相同的元素,很少用到。
    2. # 1.导入selenium
    3. from selenium import webdriver
    4. from time import sleep
    5. # 2.打开浏览器
    6. driver = webdriver.Chrome()
    7. # 3.打开页面
    8. url = "http://www.baidu.com"
    9. driver.get(url)
    10. sleep(2)
    11. # 4.使用link_text定位
    12. """
    13. 注意:
    14. """

    (6)by_partial_link_text

    说明:

    当你不能准确知道超链接上的文本信息或者只想通过一些关键字进行匹配时,可以使用by_partial_link_text这个方法来通过部分链接文字进行匹配。

    例如打开百度首页,定位点击超链接

    超链接地图源代码:在代码里用”ao1”进行匹配

    <a href="https://www.hao123.com" target="_blank" class="mnav c-font-normal c-color-t">hao123</a>
    

    示例:

    脚本代码:使用partial_link_text方法定位百度首页链接

    1. """
    2. 1.学习目标:
    3. 必须掌握selenium中超链接的定位方法
    4. 2.语法
    5. partial_link_text # 需要连接部分文本
    6. driver.find_element_by_partial_link_text(部分文本)
    7. 部分文本必须是连续的文字(中可包含空格)
    8. 3.需求
    9. 在页面中,使用定位连接的方法,访问百度网站,定位点击超链接
    10. """
    11. # 1.导入selenium
    12. from selenium import webdriver
    13. from time import sleep
    14. # 2.打开浏览器
    15. driver = webdriver.Chrome()
    16. # 3.打开页面
    17. url = "http://www.baidu.com"
    18. driver.get(url)
    19. sleep(2)
    20. # 4.使用by_partial_link_text定位
    21. """
    22. 注意:
    23. """

    复数形式:

    1. # 定位一组标超链接文本目标内容相同的元素,很少用到。
    2. # 1.导入selenium
    3. from selenium import webdriver
    4. from time import sleep
    5. # 2.打开浏览器
    6. driver = webdriver.Chrome()
    7. # 3.打开页面
    8. url = "http://www.baidu.com"
    9. driver.get(url)
    10. sleep(2)
    11. # 4.使用by_partial_link_text定位
    12. """
    13. 注意:
    14. """

    最好我这里给你们分享一下我所积累和真理的文档和学习资料有需要是领取就可以了

    1、学习思路和方法

    这个大纲涵盖了目前市面上企业百分之99的技术,这个大纲很详细的写了你该学习什么内容,企业会用到什么内容。总共十个专题足够你学习

    2、想学习却无从下手,该如何学习?

    这里我准备了对应上面的每个知识点的学习资料、可以自学神器,已经项目练手。

    3、软件测试/自动化测试【全家桶装】学习中的工具、安装包、插件....

    4、有了安装包和学习资料,没有项目实战怎么办,我这里都已经准备好了往下看

    最后送上一句话:
    世界的模样取决于你凝视它的目光,自己的价值取决于你的追求和心态,一切美好的愿望,不在等待中拥有,而是在奋斗中争取。
    如果我的博客对你有帮助、如果你喜欢我的文章内容,请 “点赞” “评论” “收藏” 一键三连哦

  • 相关阅读:
    前端git提交后菜单的配置
    Web知识:markupsafe.escape() 函数的作用
    K8S常见的持久化(存储)方案用法详解
    线程池ThreadPoolTaskExecutor实战
    2022-08-23 第二小组 张明旭 前端学习记录
    达梦管理工具报错“结果集不可更新,请确认查询列是否出自同一张表,并且包含值唯一的列。”
    记一次使用Spring注解@Scheduled出现的事故
    UE 插件模块引用
    2022操作系统实验李丁丁
    深度学习100例-循环神经网络(RNN)心脏病预测 | 第46天
  • 原文地址:https://blog.csdn.net/m0_59868866/article/details/127112268