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