📜  如何在 selenium 中找到 webtable (1)

📅  最后修改于: 2023-12-03 15:24:22.735000             🧑  作者: Mango

如何在 Selenium 中找到 Web Table

Web Table 是现代网页设计的一个重要组成部分,通常用于显示数据。在使用 Selenium 进行 Web 自动化测试时,需要在网页中找到 Web Table,以便分析和操作其中的数据。本文将介绍如何在 Selenium 中找到 Web Table。

找到 Web Table 的 HTML 代码

首先,需要找到 Web Table 的 HTML 代码。一般情况下,Web Table 会被包含在一个 <table> 标签内。因此,可以通过使用 Selenium 的定位方式(如 find_element_by_xpath() 方法)定位到包含 Web Table 的 <table> 标签,再使用 get_attribute() 方法获取该标签的 HTML 代码。示例代码如下:

table_element = driver.find_element_by_xpath('//table[@id="my_table"]')
table_html = table_element.get_attribute('innerHTML')

需要注意的是,为了定位到正确的 Web Table,需要使用相应的定位方式(如 find_element_by_class_name()find_element_by_id() 等),以及正确的 xpath 表达式和其他定位参数。

使用 BeautifulSoup 解析 HTML 代码

接下来,需要使用 BeautifulSoup 库解析 Web Table 的 HTML 代码。这里以 Python 为例,示例代码如下:

from bs4 import BeautifulSoup

soup = BeautifulSoup(table_html, 'html.parser')
rows = soup.find_all('tr')

其中,find_all() 方法用于查找 HTML 中所有符合条件的标签,这里查找的是 <tr> 标签,它代表 Web Table 中的一行数据。rows 变量将包含所有行的 BeautifulSoup 对象。

将 Web Table 转化为二维数组

接下来,需要将 Web Table 转化为二维数组,以方便分析和处理其中的数据。可以使用 Nested Lists(嵌套列表)的方式创建二维数组,具体代码如下:

table_data = []

for row in rows:
    row_data = []
    
    cells = row.find_all('td')
    for cell in cells:
        row_data.append(cell.text.strip())
    
    if row_data:
        table_data.append(row_data)

在上面的代码中,首先循环遍历每一行,然后对每一行循环遍历其包含的所有单元格(即 <td> 标签),将单元格的文本内容添加到 row_data 列表中。注意,这里使用了 strip() 方法去掉了单元格文本中的空格和换行符等。

最后,如果 row_data 列表不为空(即该行确实包含单元格),则将 row_data 列表添加到 table_data 列表中。

返回二维数组

最终,将 table_data 列表作为函数的返回值即可。完整的代码如下:

from bs4 import BeautifulSoup

def find_web_table(driver, table_locator):
    table_element = driver.find_element(*table_locator)
    table_html = table_element.get_attribute('innerHTML')
    soup = BeautifulSoup(table_html, 'html.parser')
    rows = soup.find_all('tr')
    
    table_data = []
    for row in rows:
        row_data = []
        cells = row.find_all('td')
        for cell in cells:
            row_data.append(cell.text.strip())
        if row_data:
            table_data.append(row_data)
    
    return table_data

其中,*table_locator 表示接收一个由 (定位方式, 定位值) 组成的元组参数,具体参数可根据实际情况调整。