Использование 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. Это ожидаемая производительность? Есть ли что-то, что я могу сделать, чтобы повысить производительность?