查找元素

官方文档:https://www.selenium.dev/documentation/webdriver/elements/locators/

一般通过find_element或者find_elements方法获取元素后的类型是WebElement或该类型的列表。

语法:

# 查找第一个符合条件的WebElement元素并返回。
driver.find_element(By类型, "查找的语法") # 查找符合条件的所有元素,返回的是一个WebElement元素的列表。
driver.find_elements(By类型, "查找的语法")

By类型:

from selenium.webdriver.common.by import By

# 根据id属性查找
ID = "id"
# 使用XPATH语法查找
XPATH = "xpath"
# 根据链接的文本查找
LINK_TEXT = "link text"
# 根据链接的部分文本查找
PARTIAL_LINK_TEXT = "partial link text"
# 根据name属性查找
NAME = "name"
# 根据标签名查找
TAG_NAME = "tag name"
# 根据class属性查找
CLASS_NAME = "class name"
# 使用css选择器语法查找
CSS_SELECTOR = "css selector"

注意:

找到后的元素可以再次使用xpath等方法,因为本身就是一个WebElement对象,原来有什么方法和属性,都可以继续使用!

元素的属性、方法

WebElement的一些属性和方法

# 获取元素的标签名
element.tag_name # 获取元素的text文本
element.text # 获取元素的位置信息
element.location # 获取元素的大小和位置信息
element.rect # 获取指定的属性或特性,比如可以获取链接的href、或者元素的innerHTML这些隐藏的DOM属性
element.get_attribute(attribute) # 点击元素
element.click() # 输入内容或者发送文件(表单的文件上传)
element.send_keys(value) # 清除文本元素的输入内容(前提是这个元素是一个文本元素input)
element.clear() # 提交表单
element.submit() # 元素自身截图,然后保存到指定路径中
element.screenshot(fielname) # 元素自身截图,然后返回bytes类型(注意,最好传入io.BytesIO(element.screenshot_as_png)来写入文件)
element.screenshot_as_png # 元素自身截图,但是返回的是base64字符串(html可以base64存图片的,N年前学html也学过)
element.screenshot_as_base64

针对元素截图是非常有用的,遇到一些难爬的,比如字体加密、css加密字体,还要计算什么的,如果嫌麻烦,就直接找到元素后,针对元素自身的大小直接截图,然后丢给OCR识别文字即可!香喷喷!

例子:

element = driver.find_element(By.PARTIAL_LINK_TEXT, "天猫超市")
print(f"{element.text=}")
print(f"{element.tag_name=}")
print(f"{element.location=}")
print(f"{element.rect=}")
print(f"{element.get_attribute('href')=}")
print(f"{element.get_attribute('innerHTML')=}") element.text='天猫超市'
element.tag_name='a'
element.location={'x': 1175, 'y': 194}
element.rect={'height': 16, 'width': 105, 'x': 1175.479248046875, 'y': 193.6666717529297}
element.get_attribute('href')='https://chaoshi.tmall.com/'
element.get_attribute('innerHTML')='\n 天猫超市\n '

Selenium查找元素、元素的属性和方法的更多相关文章

  1. DOM元素对象的属性和方法(2)

    11.contentEditable 作用:设置或返回元素内容可否编辑布尔值,HTML5新增属性 <!DOCTYPE html> <html> <head> < ...

  2. DOM元素对象的属性和方法(1)

    一.accessKey() 作用:获取元素焦点快捷键:设置快捷键后,使用Alt+快捷键,让元素快速获得焦点, <!DOCTYPE html> <html> <head&g ...

  3. selenium自动化之元素定位方法

    在使用selenium webdriver进行元素定位时,有8种基本元素定位方法(注意:并非只有8种,总共来说,有16种). 分别介绍如下: 1.name定位 (注意:必须确保name属性值在当前ht ...

  4. 使用Selenium对网页元素进行定位的诸种方法

    使用Selenium进行自动化操作,首先要做的就是通过webdriver的get()方法打开一个URL链接. 在打开链接,完成页面加载之后,就可以通过Selenium提供的接口,在页面上进行各种操作了 ...

  5. python+appium 查找某个元素find_element()并click()点击,正向判断与反判断的方法封装

    使用场景: 在自动化测试过程中,难免会用到反判断,包括异常情况的处理,比如:find_element_by_name('测试') 判断"测试"是否存在,存在则点击,不存在则执行其他 ...

  6. 【亲测显式等待】Selenium:元素等待的4种方法

    Selenium:元素等待的4种方法 1.使用Thread.sleep(),这是最笨的方法,但有时候也能用到而且很实用.   2.隐式等待,隐性等待是指当要查找元素,而这个元素没有马上出现时,告诉We ...

  7. selenium java-3 定位元素的八种方法

    web driver提供了八种元素定位的方法: id name class name tag name link text partial link text xpath css selector 如 ...

  8. selenium 获取某元素的 某属性 的值

    selenium  获取某元素的 某属性的值 1 先通过元素定位,获得此元素的 WebElement; WebElement   yuansu = driver.findElement(By.clas ...

  9. Selenium 八种元素定位方法

    前言: 我们在做WEB自动化时,最根本的就是操作页面上的元素,首先我们要能找到这些元素,然后才能操作这些元素.工具或代码无法像我们测试人员一样用肉眼来分辨页面上的元素.那么我们怎么来定位他们呢? 在学 ...

  10. Selenium八种元素定位方法源码阅读

    接触过Selenium的都知道元素定位有八种方法,但用不同的方法在执行时有什么区别呢? 元素定位8种方法(Python版),当然还有每一个方法对应的find_elements方法 find_eleme ...

随机推荐

  1. QA|linux指令awk '{print $(NF-1)}'为啥用单引号而不是双引号?|linux

    linux指令awk '{print $(NF-1)}'为啥用单引号而不是双引号? 我的理解: 因为单引号不对会内容进行转义,而双引号会,举个栗子 1 a=1 2 echo "$a" ...

  2. Java语言与其环境:常见问题解答

    Java语言与其环境:常见问题解答 在本博客文章中,将深入探讨Java编程语言的特点和环境,解释一些常见的关于Java的疑问. Java语言的特点是什么? Java是一种高级编程语言,它具有以下几个主 ...

  3. jQuery提交表单

    $('#myform').form('submit',{ url: "login.action", onSubmit:function(){ return $('#myform') ...

  4. [初学C#] 第二习题 : 快递跟踪信息查询

    刚学C#, 折腾的一个小玩意. 熟悉和了解C#这门编程语言. 没有啥特殊意义 解锁技能 - System.Net 的 WebRequest等http请求 - Newtonsoft.Json 这个第三方 ...

  5. EtherCAT转Modbus网关用Modbus Slave模拟从站配置案例

    EtherCAT转Modbus网关用Modbus Slave模拟从站配置案例 兴达易控EtherCAT到Modbus网关可以用作Modbus从站的配置.EtherCAT到Modbus网关允许Modbu ...

  6. Teamcenter RAC 开发之《AbstractRendering》

    背景 关于Teamcenter RAC 客制化渲染表单,做一两个有时间做还是可以的,问题是大批量做的时候就会存在很多重复的代码 例如: 1.定义很多 TCProperty,JTextFiled,ite ...

  7. linux下查找文件中某字符串出现的行以及该行前后n行

    linux下查找文件中某字符串出现的行以及该行前后n行 查找指定字符串的前后n行 grep -A 100 -B 100 "要查找的字符串" 被查找的文件 -A after 后面 - ...

  8. 搞懂fflush(stdout)

    使用 printf 或 cout 打印内容时,输出永远不会直接写入"屏幕".而是,被发送到 stdout. (stdout 就像一个缓冲区) 默认情况下,发送到 stdout 的输 ...

  9. HTML-8

    (一)引用数据类型 object function array object JavaScript对象用花括号来书写 对象属性是name:value由逗号分隔 var x={firstname:&qu ...

  10. List 切割成小 list 分批处理数据

    使用 Google Guava 库中的方法对 bmList 进行分割. Lists.partition() 方法用于将一个列表按指定大小进行分割,返回一个包含分割后子列表的新列表. 在这个例子中,bm ...