Example #1
0
        public void Get_UsingMultipleValuesOfClassAttributeWithContainsOperatorOfHtmlSpan_ReturnsTheSpecificElementWithAllSpecifiedClassValues()
        {
            // Arrange
            using (TempFile tempFile = new TempFile(
                       @"<html>
    <head>
        <title>test</title>
    </head>
    <body>
        <span name=""span1"" class=""class1"" />
        <span name=""span2"" class=""class1 class4"" />
        <span name=""span3"" class=""class1 class2 class3"" />
    </body>
</html>"))
            {
                BrowserWindow.Launch(tempFile.FilePath);
                var window = new BrowserWindowUnderTest("test");

                HtmlSpan span3 = window.Find <HtmlSpan>(By
                                                        .Class("class1", PropertyExpressionOperator.Contains)
                                                        .AndClass("class2", PropertyExpressionOperator.Contains));

                // Act and Assert
                Assert.AreEqual("span3", span3.SourceControl.Name);

                window.Close();
            }
        }
Example #2
0
        public void GetHtmlDiv_ByClass_Succeeds()
        {
            // Arrange
            using (var webPage = new TempWebPage(
                       @"<html>
    <head>
        <title>test</title>
    </head>
    <body>
        <div class=""button""><a href=""/main"">main text</a></div>
        <div class=""button""><a href=""/about"">about text</a></div>
    </body>
</html>"))
            {
                var browserWindow = BrowserWindow.Launch(webPage.FilePath);

                // Act
                HtmlDiv div = browserWindow.Find <HtmlDiv>(By.Class("button"));

                HtmlHyperlink about = browserWindow.Find <HtmlHyperlink>(By.SearchProperties("InnerText=about text;href~about"));
                HtmlDiv       div2  = about.Parent as HtmlDiv;

                // Assert
                Assert.IsTrue(div.Exists);
                Assert.AreEqual("main text", div.SourceControl.InnerText);

                Assert.IsTrue(about.Exists);

                Assert.IsTrue(div2.Exists);
                Assert.AreEqual("about text", div2.SourceControl.InnerText);

                browserWindow.Close();
            }
        }
Example #3
0
        public async Task <bool> ScrapeUrl(string url)
        {
            try
            {
                var browser = new ScrapingBrowser();
                var webpage = await browser.NavigateToPageAsync(new Uri(url));

                var article = webpage.Find("div", By.Class("article-text")).FirstOrDefault();

                //var articleMetaData = article.ChildNodes.Where(x => x.Name == "p");
                var articleBodyNode = article.ChildNodes.FirstOrDefault(x => x.GetAttributeValue("itemprop", "") != "" && x.Name == "div");
                if (articleBodyNode != null)
                {
                    var articleNodes   = articleBodyNode.ChildNodes.Where(x => x.Name == "p");
                    var articleContent = new StringBuilder();
                    foreach (var articleNode in articleNodes)
                    {
                        articleContent.AppendLine(articleNode.InnerText);
                    }

                    var fullArticle = articleContent.ToString().ToLower();
                    return(fullArticle.Contains("hitler"));
                }
                else
                {
                    _logger.Information($"Could not extract article text for article: {url}!");
                    return(false);
                }
            }
            catch (Exception e)
            {
                _logger.Error($"Error scraping article {url} : {e.Message}");
                return(false);
            }
        }
Example #4
0
        public void Class()
        {
            // Act
            By configuration = By.Class("SomeClass");

            // Assert
            Assert.AreEqual(1, configuration.Configuration.Count);
        }
Example #5
0
        public void Class()
        {
            // Act
            By configuration = By.Class("SomeClass");

            // Assert
            Assert.AreEqual(1, configuration.Configuration.Count);
            Assert.AreEqual(PropertyExpressionOperator.EqualTo, configuration.Configuration.First().PropertyOperator);
        }
Example #6
0
        public async Task <IEnumerable <Subject> > GetClassScheduleAsync(Login login)
        {
            var mainPage = await _loginService.LoginAsync(login);

            if (mainPage.Content.Contains(login.Matricula))
            {
                var schedulerClassPage = await _schedulerService.GetClassSchedulerAsync(mainPage);

                var scheduleTable = schedulerClassPage.Find("tbody", By.Class("tabela-horario")).FirstOrDefault();

                var tableRows = scheduleTable.SelectNodes("//tr");

                var tableLines = tableRows.Select((n, i) => n.SelectNodes($"//td[{i + 1}]"));

                var classes = tableLines
                              .Where(c => !Regex.IsMatch(c.First().InnerText.Trim(), @"\d{2}:\d{2}"))
                              .Select(c => c.Select(n => new Subject {
                    Title = n.InnerText.Trim()
                }));

                var hours = tableLines
                            .FirstOrDefault(c => Regex.IsMatch(c.First().InnerText.Trim(), @"\d{2}:\d{2}"))
                            .Select(n => n.InnerText.Trim());

                return(classes
                       .SelectMany(c => c.Select((s, i) =>
                {
                    var startHour = hours.ElementAt(i).Split('-').FirstOrDefault().Trim();
                    var finishHour = hours.ElementAt(i).Split('-').LastOrDefault().Trim();
                    var clas = Regex.Match(s.Title, @"\([\w\d-]+\)").Value;

                    s.ClassHour = new ClassHour {
                        StartHour = startHour, FinishHour = finishHour
                    };

                    s.Classroom = s.Title.Split(clas).LastOrDefault().Trim();
                    s.Title = s.Title.Split(clas).FirstOrDefault().Trim();

                    return s;
                })
                                   ));
            }

            return(Enumerable.Empty <Subject>());
        }
Example #7
0
        private string GetNugetEnterPackageLink()
        {
            var tag      = "a";
            var tagClass = "package-title";

            var links = page.Find(tag, By.Class(tagClass));

            if (links.Any())
            {
                return(links
                       .Select(node => ClearLinkText(node.Attributes["href"].Value))
                       .FirstOrDefault());
            }
            else
            {
                throw new NodeNotFoundException($"Não foi possível encontrar a tag {tag}");
            }
        }
Example #8
0
        private async Task <List <OfferThread> > GetWebsiteContentAsync()
        {
            var browser          = new ScrapingBrowser();
            var monsterQueryPage = await browser.NavigateToPageAsync(
                new Uri("https://www.pepper.pl/search?q=Monster%2BEnergy"));

            var selectedNodes = monsterQueryPage.Find("article", By.Class("thread")).ToList();

            var offerThreads = new List <OfferThread>();

            foreach (var selectedNode in selectedNodes)
            {
                if (selectedNode.InnerHtml.Contains("Zakończono")) // Improve condition
                {
                    continue;
                }

                offerThreads.Add(FillModelData(selectedNode));
            }

            return(offerThreads);
        }
        public IDictionary <string, string> ExpandSideBarMenu(WebPage page)
        {
            var sideBarMenu = page.Find(HtmlTags.Div.GetDescription(), By.Class(SIDE_BAR_MENU_CLASS)).FirstOrDefault();

            if (sideBarMenu is null)
            {
                return(ImmutableDictionary <string, string> .Empty);
            }

            var nodesMenu = sideBarMenu.OwnerDocument.DocumentNode.SelectNodes("//ul //a");
            var dic       = new Dictionary <string, string>();

            foreach (var node in nodesMenu)
            {
                var title = node.InnerText;
                var link  = node.Attributes.AttributesWithName(MENU_NODE_HREF_ATTRIBUTE).FirstOrDefault().Value;

                dic.TryAdd(title, link);
            }

            return(dic);
        }
        private static void GetMovie()
        {
            var url     = new Uri("https://www.imdb.com/title/tt0434665/?ref_=fn_al_tt_1");
            var browser = new ScrapingBrowser();

            var homePage = browser.NavigateToPage(url);

            var titleName = homePage.Html.CssSelect("div.title_wrapper h1").First().InnerText;

            Console.Write(titleName.Replace("&nbsp;", "").TrimEnd());

            Console.Write(" ");

            var rating = homePage.Find("div", By.Class("ratingValue")).First();

            foreach (var elem in rating.Descendants().ToList())
            {
                if (elem.Name == "span" && elem.Attributes.Any(x => x.Name == "itemprop" && x.Value == "ratingValue"))
                {
                    Console.Write(elem.InnerText);
                    break;
                }
            }
        }
Example #11
0
        public void ShouldFindElementsByAny()
        {
            var elts = driver.FindElements(By.Any(By.Class("class"), By.Tag("a")));

            A.AreEqual(3, elts.Count);
        }