web-dev-qa-db-fra.com

Comment ne compter aucun nombre de lignes dans une table à partir d'une application Web à l'aide de Selenium python webdriver

Comment compter les lignes de la table à partir d'une application Web à l'aide du pilote Web Selenium python. Ici, nous pouvons récupérer toutes les données de la table à partir d'une application Web, mais nous ne pouvons pas compter les lignes et les colonnes. Donnez-moi une idée de la procédure à suivre.

13
Kv.senthilkumar

Essayez quelque chose comme ça

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();

FYI: Ceci est l'implémentation en Java.

17
Santoshsarma

La réponse de Santoshsarma est presque exacte pour Java, mais elle comptera le nombre de cellules plutôt que le nombre de colonnes. Voici une version Python qui comptera le nombre de colonnes dans la première ligne: 

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"))

Si votre table a un en-tête, vous pouvez également compter les colonnes.

Je n'ai pas essayé d'utiliser storeXpathCount.

10
Adam Wildavsky

Vous pouvez le faire en utilisant find_elements_by ou execute_script .

Récupérer le nombre en appliquant len le résultat de find_elements_by est correct, cependant, obtenir un nombre de lignes et de colonnes différent en utilisant execute_script est assez rapide, puis obtenir len du résultat de l'appel de la méthode 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")

Vous trouverez ci-dessous des indicateurs de performance de l’utilisation de l’approche find_elements_by vs 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
3
Andriy Ivaneyko

Selenium a une fonction permettant de compter le résultat XPath, voir http://release.seleniumhq.org/Selenium-core/1.0/reference.html . Selon cela, vous pouvez utiliser storeXpathCount.

J'utilise la classe DefaultSelenium du pilote client Selenium-Java, où je peux utiliser (également en Java) les éléments suivants:

int rowCount = Selenium.getXpathCount("//table[@id='Datatable']/tbody/tr").intValue()
2
Hans Wouters

Pour les utilisateurs de python, le moyen simple de compter une balise est le suivant.

!#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))
0
user3036030