news 2026/4/30 13:10:53

[Web自动化] Selenium元素属性和方法

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
[Web自动化] Selenium元素属性和方法

8.4 Selenium元素属性和方法

在Python中使用Selenium的WebDriver对象找到的元素拥有许多属性和方法,允许你与这些元素进行交互和获取信息。以下是一些常见的元素属性和方法:

8.4.1 元素属性

  1. text
    • 描述:获取元素的文本内容。
    • 用途:常用于验证页面上显示的文本是否符合预期。
  2. tag_name
    • 描述:获取元素的标签名(如<div><a>等)。
    • 用途:了解元素的类型,有助于调试和元素定位。
  3. size
    • 描述:获取元素的大小(宽度和高度)。
    • 用途:了解元素在页面上的实际尺寸,有助于布局分析和元素定位。

{‘height’: 38, ‘width’: 391}

  1. location
    • 描述:获取元素在页面上的位置(相对于其offsetParent的坐标)。
    • 用途:进行元素间的相对定位,或者确定元素是否出现在视口内。

{‘x’: 135, ‘y’: 17}

  1. location_once_scrolled_into_view
    • 描述:获取元素在页面上滚动到可见位置后的位置(相对于整个页面的坐标)。
    • 用途:确保元素可见后,获取其准确位置。

{‘x’: 135, ‘y’: 17}

  1. rect
    • 描述:在某些Selenium版本中,rect属性提供了一个包含元素位置、大小和滚动信息的字典。
    • 用途:提供了一种方便的方式来获取元素的多个布局相关属性。

{‘height’: 38, ‘width’: 391, ‘x’: 134.60000610351562, ‘y’: 16.600000381469727}

8.4.2 一些容易混淆属性解析

el1的网页结构如下:

<optionclass="el-select-dropdown__item"value="Monday">前面<span>江西</span>后面</option>

el2的网页结构如下:

<liclass="el-select-dropdown__item"value="Monday">前面<span>江西</span>后面</li>

操作方法 option元素 li元素
el.text ‘’ ‘前面江西后面’
el.get_attribute(‘text’) ‘前面江西后面’ None
el.get_attribute(‘textContent’) ‘前面江西后面’ ‘前面江西后面’
el.get_attribute(‘value’) ‘Monday’ ‘0’
el.get_attribute(‘innerHTML’) ‘前面江西后面’ ‘前面江西后面’
说明:
el.text
返回 WebElement 的可见文本内容,不包括<option>标签内的 HTML 元素。
el.get_attribute('text')
这个方法尝试获取名为 text 的属性的值。这不是一个标准的 HTML 属性,除非在页面的 JavaScript 中定义了这样一个属性。
el.get_attribute('textContent')
获取元素的 textContent 属性的值,这是一个 JavaScript 属性,表示元素的所有文本内容,包括子孙元素的文本。
el.get_attribute('value')
获取<option>元素的 value 属性,这是<option>元素的固有属性,表示选项的值。
el.get_attribute('innerHTML')
获取元素的 innerHTML 属性的值,这是 HTML 元素内部的 HTML 内容。对于这个例子,返回的将是前面<span>江西</span>后面,即<option>标签内的所有内容。

8.4.3 元素方法

  1. is_displayed()
    • 描述:一个方法,用于检查元素是否对用户可见。
    • 用途:验证元素是否因为某些原因(如CSS样式)而不可见。

说明:
在HTML中,元素的css样式display(显示)有两种属性:block和none
none时,el.is_displayed()返回false,且在网页中不占位置。
block时,el.is_displayed()返回True。
在HTML中,元素的css样式visibility(可见性)有两种属性:visible(可见)和hidden(隐藏)
visible时,el.is_displayed()返回True
hidden时,el.is_displayed()返回False,在网页中会占用位置。

<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>Test HTML</title></head><body><p>nomal text</p><pstyle="display:block;">display:block;</p><pstyle="display:none;">display:none;</p><pstyle="visibility:visible;">visibility:visible;</p><pstyle="visibility:hidden;">visibility:hidden;</p><p>nomal text</p></body></html>
  1. is_enabled()
    • 描述:一个方法,用于检查元素是否启用。
    • 用途:验证元素是否可交互(例如,按钮是否可点击)。
  2. is_selected()
    • 描述:一个方法,用于检查元素(如复选框或单选按钮)是否被选中。
    • 用途:获取元素的选中状态。
  3. get_attribute(name)
    • 描述:一个方法,用于获取元素的属性值(如hrefidclassvalue等)。
    • 用途:获取HTML元素中定义的任何属性的值。
      说明:对于某些input、option等标签,可以通过el.get_attribute('value')获取输入框内的值。其它的标签即使存在value属性,也获取不到其值,而是’0’
  4. clear()
    • 描述:一个方法,用于清除可编辑元素(如<input><textarea>)的内容。
    • 用途:在输入文本之前清除旧的内容。
  5. *send_keys(value)
    • 描述:一个方法,用于向元素发送按键(如文本)。
    • 用途:模拟用户输入。
  6. click()
    • 描述:一个方法,用于点击元素。
    • 用途:模拟用户点击操作。
  7. submit()
    • 描述:提交表单。该方法通常用于<input type="submit"><input type="image"><button type="submit">或任何具有submit类型的<button>元素。
    • 用途:模拟用户提交表单的行为。

8.4.4 获取元素位置

在 Selenium 中,一旦你已经定位到某个元素,你可以使用以下方法来获取它的位置信息:

  1. location属性
  • 获取元素的位置坐标,这是一个字典,包含xy键,分别代表元素左上角相对于浏览器窗口左上角的横纵坐标。
element=driver.find_element_by_id('myElement')location=element.locationprint(location['x'],location['y'])
  1. rect属性
  • 获取一个包含元素边界框信息的字典,包括xywidthheight
element=driver.find_element_by_id('myElement')rect=element.rectprint(rect['x'],rect['y'],rect['width'],rect['height'])
  1. size属性
  • 获取元素的大小,返回一个包含widthheight属性的对象。
element=driver.find_element_by_id('myElement')size=element.sizeprint(size['width'],size['height'])
  1. location_once_scrolled_into_view属性
  • 获取元素在滚动到视图内后的位置坐标。这个属性确保元素已经被滚动到浏览器窗口内,然后获取其坐标。
element=driver.find_element_by_id('myElement')locationInView=element.location_once_scrolled_into_viewprint(locationInView['x'],locationInView['y'])
  1. JavaScript 执行器
  • 使用execute_script()方法执行 JavaScript 代码来获取元素的位置信息。
element=driver.find_element_by_id('myElement')script="return arguments[0].getBoundingClientRect();"rect=driver.execute_script(script,element)print(rect['x'],rect['y'])
  1. 获取元素相对于整个页面的位置
  • 要获取元素相对于整个页面的位置,需要将元素的位置坐标与其所有滚动容器的滚动偏移量相结合。
element=driver.find_element_by_id('myElement')element_location=element.location_once_scrolled_into_view x_offset=element_location['x']+driver.execute_script('return window.pageXOffset;')y_offset=element_location['y']+driver.execute_script('return window.pageYOffset;')

请注意,获取元素位置时,可能需要考虑页面滚动和其他布局因素。使用location_once_scrolled_into_view可以确保即使元素原本不在视窗内,也能获取到其正确的位置信息。此外,对于动态定位的元素或页面布局变化,可能需要额外的处理来获取准确的位置信息。

8.4.5 点击元素

在Selenium中,要成功点击一个元素,通常需要确保该元素满足以下条件:

  1. 可见性(Visibility):元素必须是可见的,即is_displayed()方法返回True。这意味着元素没有被CSS样式(如display: none)隐藏,也没有被滚动条移出可视区域之外。
  2. 可点击性(Clickability):元素必须是可点击的。这通常意味着元素是一个可交互的元素,比如按钮、链接或具有可点击属性的元素。可以通过Selenium提供的clickable=True参数的WebDriverWaituntil()方法来等待元素可点击。
  3. 启用状态(Enabled State):元素必须是启用的,即is_enabled()方法返回True。禁用的元素(如禁用的按钮)不接受点击事件。
  4. 可访问性(Accessibility):元素应该是可以被Selenium WebDriver访问的。有时候,元素可能因为某些JavaScript错误或页面加载问题而不可用。
  5. 元素定位(Element Location):元素应该已经被正确地定位,即Selenium能够找到它。这通常通过使用XPath、CSS选择器、ID或其他定位器来实现。
  6. 元素稳定性(Stability):在动态页面上,元素的位置可能会因为页面的重排或动画效果而改变。在点击之前,可能需要等待元素稳定下来。
  7. 元素大小(Size):尽管元素很小或者部分被其他元素遮挡,理论上仍然可以点击,但实际中可能会导致点击操作失败。因此,确保元素足够大以便于点击也是一个好习惯。
    在编写自动化脚本时,通常需要使用Selenium提供的等待机制(如WebDriverWaitexpected_conditions)来确保元素满足上述条件。例如:
fromseleniumimportwebdriverfromselenium.webdriver.common.byimportByfromselenium.webdriver.support.uiimportWebDriverWaitfromselenium.webdriver.supportimportexpected_conditionsasEC driver=webdriver.Chrome()driver.get("http://www.example.com")try:# 等待元素可见并可点击element=WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.ID,"myButton"),EC.visibility_of_element_located((By.ID,"myButton"))))element.click()finally:driver.quit()

在这个例子中,element_to_be_clickable是一个组合条件,它同时检查了元素的可见性和可点击性。如果元素在指定的等待时间内没有变得可点击,WebDriverWait将抛出一个TimeoutException异常。
需要注意的是,这些属性和方法是通过Selenium WebDriver API提供的元素对象来访问的,而不是直接通过WebDriver对象本身。一旦你使用find_element_*find_elements_*方法找到了一个或多个元素,你就可以对这些元素对象使用上述的属性和方法了。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/30 13:05:47

【课程设计/毕业设计】基于大数据的月季电商销售预测分析系统基于Python的淘宝月季销售预测数据可视化系统【附源码、数据库、万字文档】

java毕业设计-基于springboot的(源码LW部署文档全bao远程调试代码讲解等) 博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、…

作者头像 李华
网站建设 2026/4/23 12:18:26

AI视觉时代来临:直播美颜SDK与动态贴纸SDK的技术开发新趋势

如果说过去十年是“移动互联网红利期”&#xff0c;那么现在&#xff0c;我们正站在一个全新的拐点上——AI视觉时代。直播、电商、短视频、社交、虚拟人、元宇宙&#xff0c;这些看似不同的赛道&#xff0c;其实都指向同一个核心能力&#xff1a;实时视觉处理技术。而在这个时…

作者头像 李华
网站建设 2026/4/22 1:05:48

嵌入模型推理加速:ONNX Runtime在AI原生应用中的使用教程

嵌入模型推理加速&#xff1a;ONNX Runtime在AI原生应用中的使用教程 一、引言&#xff1a;为什么你的嵌入模型跑得比蜗牛还慢&#xff1f; 1.1 一个真实的痛点&#xff1a;RAG应用的"卡脖子"时刻 上周凌晨三点&#xff0c;我收到了创业公司朋友的求助消息&#xff1…

作者头像 李华
网站建设 2026/4/23 0:07:32

【课程设计/毕业设计】大数据基于网络爬虫的安客居二手房屋信息采集系统基于django+网络爬虫的安客居二手房屋信息采集系统的设计与实现【附源码、数据库、万字文档】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/4/18 9:38:23

先知AI洞察 | 男装创意的枯竭,是否已让您彻夜难眠?

当下男装市场同质化严重&#xff0c;设计灵感仿佛陷入循环&#xff0c;你是否也感受到了这份挥之不去的创意焦虑&#xff1f;从趋势预测到图案设计&#xff0c;传统的创作流程耗时费力&#xff0c;且难以突破固有思维。这不仅是设计师的困境&#xff0c;更是品牌面对快速迭代的…

作者头像 李华