À l'aide de SeleniumDriver d'extraire toutes les lignes et les colonnes étant donné un élément de tableau

Je suis grattant une table qui va finalement être exportés en format CSV. Il y a plusieurs cas, j'ai peut-être besoin à considérer, tels que des tableaux imbriqués, s'étend sur des lignes ou des cellules, etc. mais pour l'instant je vais juste ignorer ces cas et de les assumer, j'ai une table très très simple. Par "simple", je veux dire, nous avons juste les lignes et les cellules, éventuellement, à une inégalité dans le nombre de cellules par ligne, mais c'est encore assez basique dans la structure.

<table>
  <tr>
    <td>text </td>
    <td>text </td>
  </tr>
  <tr>
    <td>text </td>
  </tr>
</table>

Mon approche est de simplement parcourir les lignes et les colonnes

String[] rowTxt;
WebElement table = driver.findElement(By.xpath(someLocator));
for (WebElement rowElmt : table.findElements(By.tagName("tr")))
{
    List<WebElement> cols = rowElmt.findElements(By.tagName("td"));
    rowTxt = new String[cols.size()];
    for (int i = 0; i < rowTxt.length; i++)
    {
        rowTxt[i] = cols.get(i).getText();
    }
}

Cependant, c'est assez lent. Pour un fichier CSV avec 218 lignes (ce qui signifie, ma table a 218 lignes), chaque ligne ayant pas plus de 5 colonnes, il a pris 45 secondes à gratter de la table.

J'avais essayé d'éviter une itération sur chaque cellule à l'aide de getText sur l'élément de ligne en espérant que la sortie serait délimité par quelque chose, mais il n'était pas.

Est-il un meilleur moyen de gratter un tableau?

  • Sinon, j'ai peut envisager l'utilisation de sélénium pour obtenir le code source de la page, et ensuite utiliser Jsoup pour faire l'analyse HTML, car j'ai bien aimé Jsoup de la performance.