Beispiel #1
0
        public void HappyPath(string doubleString, double expectedOutput)
        {
            var test   = new ConvertToDouble();
            var result = test.DoConversion(doubleString);

            Assert.AreEqual(expectedOutput, result);
            Assert.IsInstanceOf <double>(result);
        }
Beispiel #2
0
    public static int Main()
    {
        ConvertToDouble ac = new ConvertToDouble();

        TestLibrary.TestFramework.BeginTestCase("Convert.ToDouble(...)");

        if (ac.RunTests())
        {
            TestLibrary.TestFramework.EndTestCase();
            TestLibrary.TestFramework.LogInformation("PASS");
            return(100);
        }
        else
        {
            TestLibrary.TestFramework.EndTestCase();
            TestLibrary.TestFramework.LogInformation("FAIL");
            return(0);
        }
    }
        public async Task <List <ProductDetails> > ScrapeWebsiteAsync(string siteUrl)
        {
            List <ProductDetails> products = new List <ProductDetails>();

            if (siteUrl.Contains("?sort="))
            {
                Colorful.Console.WriteLineStyled($"[{DateTime.Now:HH:mm:ss}] [INFO] A ordenar os produtos do mais popular para menos popular:", Program.M_Options.StyleConsole);
                siteUrl = siteUrl.Substring(0, siteUrl.IndexOf("?"));
            }
            //Use the default configuration for AngleSharp
            var config = Configuration.Default.WithDefaultLoader();
            //Create a new context for evaluating webpages with the given config
            var context = BrowsingContext.New(config);

            Colorful.Console.WriteLineStyled($"[{DateTime.Now:HH:mm:ss}] [INFO] Começa", Program.M_Options.StyleConsole);

            IDocument document = await context.OpenAsync(siteUrl);

            //var butttonToSort = document.QuerySelector(".select-dropdown").ChildNodes.OfType<IHtmlAnchorElement>().FirstOrDefault();
            //string buttonToSortValue = butttonToSort.ChildNodes.OfType<IHtmlSpanElement>().Select(m => m.TextContent).FirstOrDefault();

            // Se não está ordenado do mais popular para o menos popular

            //butttonToSort.DoClick();
            //var sortByPopularity = document.QuerySelector(".select-dropdown").ChildNodes.GetElementsByTagName("dd").FirstOrDefault().GetElementsByTagName("ul").FirstOrDefault().ChildNodes.OfType<IHtmlAnchorElement>().FirstOrDefault();
            //string html = sortByPopularity.InnerHtml;

            // Enquanto podemos navegar entre as páginas

            int counterPopularity = 1;

            while (true)
            {
                Colorful.Console.WriteLineStyled($"[{DateTime.Now:HH:mm:ss}] [INFO] Página: {NumberPage}", Program.M_Options.StyleConsole);

                // DIV completo para cada produto
                IHtmlCollection <IElement> pricesListItemsLinq = document.QuerySelectorAll("div.product-item");

                foreach (var div in pricesListItemsLinq)
                {
                    ProductDetails product = new ProductDetails();

                    var itemName = div.QuerySelector("a.product-item-name");

                    // Nome do Produto
                    product.ProductName = itemName.GetAttribute("title");

                    // Link do produto no Kuanto Kusta
                    if (itemName.GetAttribute("href") == "#")
                    {
                        string onClickAttribute = itemName.GetAttribute("onclick");
                        string encodedURL       = onClickAttribute.Substring(onClickAttribute.IndexOf(@"'"), onClickAttribute.LastIndexOf(@"'") - onClickAttribute.IndexOf(@"'"));
                        string decodedURL       = Uri.UnescapeDataString(encodedURL);
                        product.WebsiteUrl = decodedURL.Substring(1, decodedURL.IndexOf(@",") - 2);
                    }
                    else
                    {
                        product.WebsiteUrl = "https://www.kuantokusta.pt" + itemName.GetAttribute("href");
                    }

                    // ID do produto (KuantoKusta)
                    product.ProductId = itemName.ChildNodes.OfType <AngleSharp.Html.Dom.IHtmlSpanElement>().FirstOrDefault().GetAttribute("data-id");

                    // Link da Imagem de Perfil
                    product.ImageLink = div.QuerySelector("img.img-responsive").GetAttribute("src");
                    if (product.ImageLink.Contains("kuantokusta") == false)
                    {
                        product.ImageLink = div.QuerySelector("img.img-responsive").GetAttribute("data-src");
                    }

                    // Marca
                    product.Brand = div.QuerySelector("div.product-item-value").ChildNodes.OfType <AngleSharp.Html.Dom.IHtmlAnchorElement>().Select(m => m.TextContent).FirstOrDefault();

                    // Node do Preco
                    var priceNode = div.QuerySelector("a.product-item-price");

                    // Conteúdo to preco para formatar
                    var priceTextContent = priceNode.ChildNodes.OfType <AngleSharp.Html.Dom.IHtmlSpanElement>().Select(m => m.TextContent).FirstOrDefault();

                    // Preco formatado em string
                    string priceString = priceTextContent.Substring(0, priceTextContent.IndexOf("€"));

                    // Preco em double
                    product.CurrentPrice = ConvertToDouble.StringPriceToDouble(priceString);

                    product.Popularity = counterPopularity++;

                    products.Add(product);
                }
                Colorful.Console.WriteLineStyled($"[{DateTime.Now:HH:mm:ss}] [INFO] Lidos {products.Count} produtos", Program.M_Options.StyleConsole);

                if ((document = await NavigateToNextPage(document)) == null)
                {
                    NumberPage = 1;
                    return(products);
                }

                // Temos todos os produtos da página para formatar para dados funcionais
            }
        }