Esempio n. 1
0
    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()
                });
            }
        }