python+selenium(14)---定位table并获取table中的数据,并删除某一行数据(如果每行后面提供删除按钮)

这篇博客介绍了如何使用Python+Selenium定位HTML表格并获取数据,以及如何删除指定行数据。首先,通过代码定位到目标表格和删除按钮,随后触发删除操作。接着,通过遍历列表来验证数据是否已被成功删除。
部署运行你感兴趣的模型镜像

1.定位table并获取数据

    def get_table_content(self, dr, tableId):
        """
        读取列表数据
        :param dr:
        :param tableId: 列表ID
        :return:
        """
        arr = []
        arr1 = []
        # 根据table ID定位到表格
        table = dr.find_element_by_id(tableId)
        # 通过标签名获取表格的所有行
        table_tr_list = table.find_elements_by_tag_name("tr")
        # 按行查询表格的数据,取出的数据是一整行,按空格分隔每一列的数据
        for tr in table_tr_list:
            arr1 = (tr.text).split(" ")  # 以空格拆分成若干个(个数与列的个数相同)一维列表
            # print(tr.text)
            # print(arr1)
            arr.append(arr1)  # 将表格数据组成二维的列表
        return arr

2.在列表中查看是否存在期望的数据

    def table_data(self, arr, queryContent):
        """
        循环遍历table数据,确定查询数据的位置
        :param arr:
        :param queryContent: 期望数据的名称
        :return:
        """
        for i in range(len(arr)):
            for j in range(len(arr[i])):
                if queryContent == arr[i][j]:
                    return arr[i][j]
                    print("%r坐标为(%r,%r)" % (queryContent, i + 1, j + 1))

3.在实际用例中进行方法调用

    
  
    arr = public.get_table_content(browser, 'depart-table')
    depart_name = public.table_data(arr, '自动测试部门')
    assert depart_name == '自动测试部门'

4.删除一行数据

先看一下页面的代码

先定位到需要删除的那一行,然后定位到该行的删除按钮,点击

    def del_table_data(self, dr, tableId, row):
        """
        定位到需要删除数据的那一行并点击操作列的删除按钮
        :param dr:
        :param row: 需要删除数据的行数
        :param tableId: 列表ID
        :return:
        """
        table = dr.find_element_by_id(tableId)
        # 通过标签名获取表格的所有行
        table_tr_list = table.find_elements_by_tag_name("tr")
        # 通过元素的title属性来进行定位,注意路径层级
        table_tr_list[row].find_element_by_xpath(".//button[@title='删除']").click()

检查是否删除成功,我还是采用遍历列表看数据是否仍在列表中方法来判断

    new_arr = public.get_table_content(browser, 'depart-table')
    new_depart_row = public.table_data(new_arr, '自动测试部门')
    print(new_depart_row)
    try:
        assert new_depart_row == None
        log.logger.info('部门{自动测试部门}删除成功')
    except AssertionError:
        msg = '部门删除失败,列表中仍显示部门{自动测试部门}'
        log.logger.error(msg)
        pytest.fail(msg)
    finally:
        log.logger.info('删除部门{自动测试部门}验证完成')

 

您可能感兴趣的与本文相关的镜像

Linly-Talker

Linly-Talker

AI应用

Linly-Talker是一款创新的数字人对话系统,它融合了最新的人工智能技术,包括大型语言模型(LLM)、自动语音识别(ASR)、文本到语音转换(TTS)和语音克隆技术

在使用 PythonSelenium 获取网页表格中某一元素的文本内容时,如果返回为空,可能是由于以下原因及解决办法: ### 原因分析与解决方案 1. **元素未加载完成** 网页中的某些表格数据可能通过异步加载的方式呈现,导致 Selenium获取文本时元素尚未完全加载。 - **解决方法:** 使用显式等待确保元素可见后再进行操作。例如: ```python from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 显式等待表格一行的元素出现 element = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.XPATH, '//table//tr[2]//td[2]')) ) text_content = element.text ``` 2. **元素被隐藏或不可见** 如果目标单元格的内容是由 JavaScript 动态生成或者样式设置为 `display: none` 或 `visibility: hidden`,则 `.text` 属性可能会返回空值。 - **解决方法:** 使用 `get_attribute()` 方法获取元素的 `textContent` 或 `innerText` 属性来提取隐藏元素的内容。例如: ```python table_td_list = driver.find_element(By.XPATH, '//table//tr[2]//td[2]') table_td_text = table_td_list.get_attribute('textContent') ``` 此方法适用于需要从隐藏元素中提取文本内容的情况 [^1]。 3. **XPath 定位不准确** 如果 XPath 表达式未能正确匹配到目标单元格,可能导致返回空值。 - **解决方法:** 验证 XPath 的准确性。可以通过打印出整个行的内容来确认是否定位到了正确的行,逐级缩小范围以找到具体的单元格。例如: ```python table = driver.find_element(By.TAG_NAME, 'table') # 定位表格 rows = table.find_elements(By.TAG_NAME, 'tr') # 获取所有行 for row in rows: cells = row.find_elements(By.TAG_NAME, 'td') # 获取每行的所有单元格 if len(cells) > 1: print(cells[1].text) # 打印第二的内容 ``` 这种方式可以帮助验证是否正确地定位到了目标单元格 [^3]。 4. **动态渲染内容(如 AJAX 请求)** 如果表格内容是通过 AJAX 请求动态加载的,则直接调用 `.text` 可能无法获取到最新的数据- **解决方法:** 结合 JavaScript 执行器来获取元素的最新状态。例如: ```python script = "return arguments[0].textContent;" text_content = driver.execute_script(script, table_td_list) print(text_content) ``` 这种方法可以绕过浏览器的渲染限制,直接获取 DOM 中的内容 [^1]。 5. **表格结构复杂** 某些网页表格可能包含嵌套的 `<div>`、`<span>` 等标签,导致直接读取 `.text` 无法获取完整的文本内容。 - **解决方法:** 使用 `get_attribute('outerHTML')` 或 `get_attribute('innerHTML')` 来获取 HTML 内容解析其中的文本。例如: ```python html_content = table_td_list.get_attribute('outerHTML') from bs4 import BeautifulSoup soup = BeautifulSoup(html_content, 'html.parser') text_content = soup.get_text() print(text_content) ``` 这种方式可以处理复杂的 HTML 结构提取其中的文本内容 [^2]。 ### 总结 当使用 PythonSelenium 获取网页表格中某一元素的文本内容时遇到返回为空的问题,可以通过以下步骤排查和解决: - 确保元素已经加载完成。 - 使用 `get_attribute()` 方法获取隐藏元素的内容。 - 验证 XPath 表达式的准确性。 - 使用 JavaScript 执行器获取动态渲染的内容。 - 处理复杂的 HTML 结构,提取所需的文本内容。 通过这些方法,可以有效解决表格某一元素文本为空的问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值