Searching in tbody and jump over not wished stocks improved performance

This commit is contained in:
2022-02-07 12:28:01 +01:00
parent 8b74067a10
commit b3d1a46c6c
8 changed files with 199 additions and 47 deletions

View File

@ -13,5 +13,6 @@
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\DataDomain\DataDomain.csproj" />
<ProjectReference Include="..\Helpers\Helpers.csproj" />
</ItemGroup>
</Project>

View File

@ -1,4 +1,5 @@
using DataDomain;
using Helpers;
using OpenQA.Selenium;
using System;
using System.Collections;
@ -64,7 +65,7 @@ namespace BrowserHelper.Extensions
ColumnName = columns[colIndex].Text != "" ?
columns[colIndex].Text : colIndex.ToString(),
ColumnValue = colValue.Text,
ColumnSpecialValue = GetControl(colValue)
//ColumnSpecialValue = GetControl(colValue)
});
}
colIndex++;
@ -78,6 +79,46 @@ namespace BrowserHelper.Extensions
return tableDataCollection;
}
public static List<DiTraderStockRow> SimpleReadTablePartly(this IWebElement table, string[] shares, string[] shareHeaders)
{
var shareCollection = new List<DiTraderStockRow>();
var columns = table.FindElements(By.TagName("th"));
IWebElement tblBody = table.FindElement(By.XPath(".//tbody"));
var rows = tblBody.FindElements(By.TagName("tr"));
Dictionary<string, int> columnPos = new Dictionary<string, int>();
GlobalStopwatch.PrintSecs("After allocations");
for (int i = 0; i < columns.Count; i++)
{
if (shareHeaders.Contains(columns[i].Text)) columnPos.Add(columns[i].Text, i);
}
var antal = shares.Length;
int rowIndex = 0;
GlobalStopwatch.PrintSecs("Before scraplooping");
foreach (var row in rows)
{
var element = row.FindElement(By.XPath(".//td"));
if (!shares.Contains(element.Text)) { }
else
{
var colDatas = row.FindElements(By.TagName("td"));
if (colDatas.Count != 0 && shares.Contains(colDatas[0].Text))
{
shareCollection.Add(new DiTraderStockRow
{
StockName = colDatas[columnPos["Aktie"]].Text,
LatestPrice = decimal.Parse(colDatas[columnPos["Senast"]].Text),
TimeOfDay = TimeSpan.Parse(colDatas[columnPos["Tid"]].Text)
});
rowIndex++;
antal--;
}
}
if (antal < 1) break;
}
GlobalStopwatch.PrintSecs("After scraplooping");
return shareCollection;
}
private static ColumnSpecialValue GetControl(IWebElement columnValue)
{
@ -131,45 +172,45 @@ namespace BrowserHelper.Extensions
}
public static List<DiTraderStockRow> GetCertainStocks(this IWebElement element, string[] shares, string[] shareHeaders)
{
List<DiTraderStockRow> shareList = new List<DiTraderStockRow>();
var reducedList = ReadTablePartly(element, shares, shareHeaders);
int rNr = -1;
DiTraderStockRow Aktie = null;
foreach (var shareRow in reducedList)
{
if (shareRow.RowNumber != rNr)
{
if (Aktie != null)
{
shareList.Add(Aktie);
}
Aktie = new();
rNr = shareRow.RowNumber;
}
switch (shareRow.ColumnName)
{
case "Aktie":
{
Aktie.StockName = shareRow.ColumnValue;
break;
}
case "Senast":
{
Aktie.LatestPrice = Convert.ToDecimal(shareRow.ColumnValue);
break;
}
case "Tid":
{
Aktie.TimeOfDay = TimeSpan.Parse(shareRow.ColumnValue);
break;
}
}
}
shareList.Add(Aktie);
return shareList;
}
//public static List<DiTraderStockRow> GetCertainStocks(this IWebElement element, string[] shares, string[] shareHeaders)
//{
// List<DiTraderStockRow> shareList = new List<DiTraderStockRow>();
// var reducedList = ReadTablePartly(element, shares, shareHeaders);
// int rNr = -1;
// DiTraderStockRow Aktie = null;
// foreach (var shareRow in reducedList)
// {
// if (shareRow.RowNumber != rNr)
// {
// if (Aktie != null)
// {
// shareList.Add(Aktie);
// }
// Aktie = new();
// rNr = shareRow.RowNumber;
// }
// switch (shareRow.ColumnName)
// {
// case "Aktie":
// {
// Aktie.StockName = shareRow.ColumnValue;
// break;
// }
// case "Senast":
// {
// Aktie.LatestPrice = Convert.ToDecimal(shareRow.ColumnValue);
// break;
// }
// case "Tid":
// {
// Aktie.TimeOfDay = TimeSpan.Parse(shareRow.ColumnValue);
// break;
// }
// }
// }
// shareList.Add(Aktie);
// return shareList;
//}
public static void PerformActionOnCell(this IWebElement element, string targetColumnIndex, string refColumnName, string refColumnValue, string controlToOperate = null)