public async static Task <TimeSpan> GetPredictor(RaceDistance raceDistance, TimeSpan fiveKm) { TimeSpan ret = default(TimeSpan); using (var puppeteer = new PuppeteerHelper()) { await puppeteer.StartAsync(); await puppeteer.OpenAsync(url, async (page, response) => { // select the option on the target race distance await puppeteer.SelectOptionAsync(page, "#frace", GetRaceDistanceValue(raceDistance)); // select the base race distance of the submitted time await puppeteer.SelectOptionAsync(page, "#r1", GetRaceDistanceValue(RaceDistance.FiveKm)); // enter the hours, minutes, seconds of the base race await puppeteer.EnterTextAsync(page, "#r1t_hours", fiveKm.Hours.ToString()); await puppeteer.EnterTextAsync(page, "#r1t_minutes", fiveKm.Minutes.ToString()); await puppeteer.EnterTextAsync(page, "#r1t_seconds", fiveKm.Seconds.ToString()); // click the 'Calculate' button. await puppeteer.HitButtonAsync(page, ".form-submit", true); // get the results var result = await puppeteer.GetInnerHtmlAsync(page, "#results"); // parse the results html ret = ParseResults(result); }); } return(ret); }
private async Task ScrapeHistoricalData(Page page, ResultCollection <ResultItemCollection> resultCollection, Dictionary <string, object> args = null) { var resultSelector = "#HistoricalDataTable"; await page.WaitForSelectorAsync(resultSelector); //try to get the table headers var mappings = _scrappedSettingRepository.GetItemSettings("HistoricalData"); var dataSelector = "#HistoricalDataTable > tbody > tr"; var tData = await PuppeteerHelper.GetTableData(page, dataSelector, mappings); var identifier = args["StockCode"].ToString(); var collection = resultCollection.GetItem(identifier); var date = ""; foreach (var item in tData) { if (date != item["Date"]?.GetValue()) { date = item["Date"].GetValue(); } collection.Items.AddRange(mappings.Select(x => new ResultItem { Name = x.Key, Value = item[x.Key].GetValue(), Group = date, IsMultiple = true }).ToList()); } }
private async Task ScrapeStockTable(Page page, ResultCollection <ResultItemCollection> resultCollection, Dictionary <string, object> args = null) { var resultSelector = "#MAIN_BODY"; await page.WaitForSelectorAsync(resultSelector); //try to get the table headers var mappings = _scrappedSettingRepository.GetItemSettings("TableDataSetting"); var dataSelector = "#MAIN_BODY table > tbody > tr"; var tData = await PuppeteerHelper.GetTableData(page, dataSelector, mappings); var identifier = mappings.FirstOrDefault(x => x.IsIdentifier)?.Key; foreach (JToken link in tData) { resultCollection.Add(new ResultItemCollection { Key = identifier, Items = mappings.Select(x => new ResultItem { Name = x.Key, Value = link[x.Key].GetValue() }).ToList() }); } }
private async Task ScrapeTextboxDataGeneratedByJavascript(Page page, ResultCollection <ResultItemCollection> resultCollection, Dictionary <string, object> args) { var value = await PuppeteerHelper.GetTextboxValue(page, "#txtOnLoad"); resultCollection.AddItem("TextBox", new List <ResultItem> { new ResultItem { Name = "TextBox", Value = value } }); }
private async Task ScrapeTechnicalAnalysisData(Page page, ResultCollection <ResultItemCollection> resultCollection, Dictionary <string, object> args = null) { var resultSelector = "#TechnicalAnalysisContent"; await page.WaitForSelectorAsync(resultSelector); //try to get the table headers var mappings = _scrappedSettingRepository.GetItemSettings("TechnicalAnalysisData"); var tData = await PuppeteerHelper.GetElements(page, mappings); var identifier = args["StockCode"].ToString(); resultCollection.Add(new ResultItemCollection { Key = identifier, Items = mappings.Select(x => new ResultItem { Name = x.Key, Value = tData.FirstOrDefault(j => j[x.Key] != null)[x.Key].GetValue() }).ToList() }); }
private async Task ScrapeRealTimeMonitoringData(Page page, ResultCollection <ResultItemCollection> resultCollection, Dictionary <string, object> args) { var resultSelector = "#StockQuoteTable"; await page.WaitForSelectorAsync(resultSelector); //try to get the table headers var mappings = _scrappedSettingRepository.GetItemSettings("RealTimeMonitoring"); var dataSelector = "#StockQuoteTable > tbody > tr"; var tData = await PuppeteerHelper.GetTableData(page, dataSelector, mappings); foreach (JToken link in tData) { resultCollection.Add(new ResultItemCollection { Key = link["StockCode"].GetValue(), Items = mappings.Select(x => new ResultItem { Name = x.Key, Value = link[x.Key].GetValue() }).ToList() }); } }