【问题标题】:how to locate element present on table on webpage using selenium如何使用硒定位网页上表格上的元素
【发布时间】:2015-09-14 15:01:08
【问题描述】:

如何获取特定列的位置,如何获取表中存在的行数

 <TR>
    <TD>Table Data</TD>
    <TD>More Table Data</TD>
    </TR>
    <TD>More Table Data</TD>
    <TD>Table Data</TD>
    </TR>

将上面视为表结构

【问题讨论】:

  • 欢迎来到 SO !发布问题时,添加与您的问题或您尝试实现的目标相关的代码。它将帮助其他人找到解决您问题的方法。

标签: selenium html-table


【解决方案1】:

HTML 代码 sn-p for Table 你可以注意到表格主要是由两个标签组成的。 TRTD

TR代表表格中的行,TD代表表格中的列。

下面是简单的代码 sn-p,它显示了如何定位表中存在的行数和列数。

int Row_count = driver.findElements(By.xpath("/table/tbody/tr")).size();

System.out.println("Number Of Rows = "+Row_count);

注意: Xpath 总是会有所不同,但标签 /table/tbody/ 在大多数情况下会保持不变。

int Col_count = driver.findElements(By.xpath("/table/tbody/tr[1]/td")).size();

System.out.println("Number Of Columns = "+Col_count);

**注意:***tr[1]/td* 选择表中的第一行并给出该表中存在的所有列。

以同样的方式,您可以通过更改 Xpath Logic 轻松获取 Web 表中存在的任何 Web 元素。

【讨论】:

    【解决方案2】:

    是否有任何属性可用于识别表?还是需要表格元素的索引?可以提供示例 url/html 吗?

    from bs4 import BeautifulSoup
    soup = BeautifulSoup(page)
    table = soup.find("table", { "class" : class_name })
    print len(table.findAll("tr"))
    

    我通常发现使用 beautifulsoup / pandas 数据框很容易解决这些类型的问题。下面使用维基百科的示例:

    import pandas as pd
    from bs4 import BeautifulSoup
    import urllib2
    
    
    car_data = pd.DataFrame()
    
    model = 'Tesla_Model_S'
    
    wiki = "https://en.wikipedia.org/wiki/{0}".format(model)
    header = {'User-Agent': 'Mozilla/5.0'} 
    req = urllib2.Request(wiki,headers=header)
    page = urllib2.urlopen(req)
    soup = BeautifulSoup(page)
    table = soup.find("table", { "class" : "infobox hproduct" })
    
    for row in table.findAll("tr")[2:]:
        try:
            field = row.findAll("th")[0].text.strip()
            val = row.findAll("td")[0].text.strip()
            car_data.set_value(model,field,val)
        except:
            pass
    
    print car_data
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-22
      • 1970-01-01
      • 2017-10-14
      • 2018-04-29
      相关资源
      最近更新 更多