Производительность Selenium при преобразовании HTML-таблицы в .NET DataTable - PullRequest
0 голосов
/ 18 ноября 2018

Использование Selenium с VB.NET с использованием ChromeDriver. Я использую XPath для получения коллекции узлов TR, а затем перебираю каждую строку для получения данных TD.

Источник выглядит так

<table width="100%" border="0" cellpadding="2" cellspacing="1">
    <tbody>
        <tr bgcolor="#E7E7BD">
            <td class="content">RUSSIA</td>
            <td class="content">ABCD</td>
            <td class="content">13-APR-18</td>
            <td class="content">26-APR-18</td>
            <td class="content"> 01234567</td>
            <td class="content"/>
            <td class="content"/>
        </tr>
        <tr bgcolor="#E7E7BD">
            <td class="content">ZURICH</td>
            <td class="content">XYZS</td>
            <td class="content">09-NOV-18</td>
            <td class="content"/>
            <td class="content"> 98765432</td>
            <td class="content">Z</td>
            <td class="content">DAA</td>
        </tr>
    </tbody>
</table>        

Я использую это, чтобы получить строки, которые хорошо работают и возвращает около 9500 строк:

Dim trNodes As IReadOnlyCollection(Of IWebElement) = driver.FindElements(By.XPath("//tbody/tr[preceding-sibling::tr/td/a/@name='MAIN' and following-sibling::tr/td/a/@name='APPX']"))

Затем я перебираю каждую строку HTML и добавляю ее в таблицу данных .NET

.
For Each elem As IWebElement In trNodes
    'get the cells in the row (ie the TD elements in the TR element)
    Dim webCells As IReadOnlyCollection(Of IWebElement) = elem.FindElements(By.XPath("td"))

    'create a new DataRow and add data
    Dim row As DataRow = dt.NewRow
    'now cycle through all the fields and add them to the DataRow
    For i As Integer = 0 To webCells.Count - 1
       row(i + 1) = webCells(i).Text
    Next i

   'add the DataRow to the DataTable
   dt.Rows.Add(row)
Next elem

В настоящее время он работает так, как задумано, НО это занимает очень много времени для обработки. 9500 строк с 7 полями занимает около с половиной часов для вставки в DataTable. Это ожидаемая производительность? Есть ли что-то, что я могу сделать, чтобы повысить производительность?

1 Ответ

0 голосов
/ 19 ноября 2018

Из того, что я понял, Selenium отлично подходит для автоматизации, но разбор HTML не слишком хорош. Поэтому для разбора узла я использую HTML-пакет Agility Pack, который делает это менее чем за 5 минут.

...