15

如何使用 selenium python web 驱动程序从 web 应用程序中计算表中的行数。在这里,我们可以从 Web 应用程序中检索表中的所有数据,但无法计算行数和列数,请告诉我如何执行此操作。

4

5 回答 5

20

尝试这样的事情

int rowCount=driver.findElements(By.xpath("//table[@id='DataTable']/tbody/tr")).size();

int columnCount=driver.findElements(By.xpath("//table[@id='DataTable']/tbody/tr/td")).size();

仅供参考:这是java中的实现。

于 2013-02-12T16:15:58.617 回答
13

Santoshsarma 的答案对于 Java 来说几乎是正确的,但它会计算单元格的数量而不是列的数量。这是一个 Python 版本,它将计算第一行中的列数:

row_count = len(driver.find_elements_by_xpath("//table[@id='DataTable']/tbody/tr"))
column_count = len(driver.find_elements_by_xpath("//table[@id='DataTable']/tbody/tr/td"))

如果您的表格有标题,您可以计算那里的列。

我还没有尝试过使用 storeXpathCount。

于 2014-05-25T22:34:27.873 回答
3

您可以使用find_elements_byexecute_script来完成。

通过在find_elements_by的结果上应用len来检索计数是正确的方法,但是在另一方面,通过使用execute_script获取行和列的计数比从方法调用的结果中获取要快得多:lenfind_elements_by

rows_count = driver.execute_script("return document.getElementsByTagName('tr').length")
columns_count = driver.execute_script("return document.getElementsByTagName('tr')[0].getElementsByTagName('th').length")

以下是使用find_elements_by 与 execute_script方法的性能指标:

from timeit import timeit

# Time metrics of retrieving 111 table rows
timeit(lambda:driver.execute_script("return document.getElementsByTagName('tr').length"), number=1000)
# 5.525
timeit(lambda:len(driver.find_elements_by_tag_name("tr")), number=1000) 
# 9.799
timeit(lambda:len(driver.find_elements_by_xpath("//table/tbody/tr")), number=1000)
# 10.656

# Time metrics of retrieving 5 table headers
timeit(lambda:driver.execute_script("return document.getElementsByTagName('tr')[0].getElementsByTagName('th').length"), number=1000)
# 5.441
timeit(lambda:len(driver.find_elements_by_tag_name("th")), number=1000)
8.604
timeit(lambda:len(driver.find_elements_by_xpath("//table/tbody/th")), number=1000)
# 9.336
于 2016-08-03T09:19:26.770 回答
2

Selenium 具有计算 XPath 结果的功能,请参见http://release.seleniumhq.org/selenium-core/1.0/reference.html。据此,您可以使用 storeXpathCount。

我正在使用 selenium-java-client-driver 中的 DefaultSelenium 类,我可以在其中使用(也在 java 中)以下内容:

int rowCount = selenium.getXpathCount("//table[@id='Datatable']/tbody/tr").intValue()
于 2014-02-28T14:35:03.833 回答
2

对于 python 用户,计算标签的简单方法如下。

!#use find_elements_by_xpath

test_elem = self.driver.find_elements_by_xpath("//div[@id='host-history']/table[1]/tbody[1]/tr")

!#then check the len of the returnes list

print (len(test_elem))
于 2017-07-06T13:26:55.530 回答