如何使用 selenium python web 驱动程序从 web 应用程序中计算表中的行数。在这里,我们可以从 Web 应用程序中检索表中的所有数据,但无法计算行数和列数,请告诉我如何执行此操作。
5 回答
尝试这样的事情
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中的实现。
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。
您可以使用find_elements_by或execute_script来完成。
通过在find_elements_by的结果上应用len来检索计数是正确的方法,但是在另一方面,通过使用execute_script获取行和列的计数比从方法调用的结果中获取要快得多:len
find_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
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()
对于 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))