示例#1
0
        public async Task <string> GetFollowing(string profile, int position, bool enterProfile = true, bool openDialog = true)
        {
            if (enterProfile)
            {
                Enter(profile);
            }

            var followingsCount = GetFollowingsCount(profile);

            if (position > followingsCount)
            {
                return(null);
            }

            if (openDialog)
            {
                driver.Exec(driver.FindElement(By.XPath("//a[contains(@href,'/following/')]"), 60).Click,
                            successWhen: () => driver.Url.Contains("/following"));
            }


            var liElements = driver.FindElements(By.CssSelector("ul > div:first-of-type > li span > a.notranslate"), 30);

            var     users   = liElements.Select(x => x.Text).ToHashSet();
            Actions actions = new Actions(driver);


            while (position > users.Count())
            {
                liElements = driver.FindElements(By.CssSelector("ul > div:first-of-type > li span > a.notranslate"), 60);

                await ScrollDown.ScrollInto(driver, liElements.Last());

                foreach (var user in getUsers())
                {
                    users.Add(user);
                }
            }

            return(users.ElementAt(position - 1));
        }
示例#2
0
        public async IAsyncEnumerable <string> GetAllFollowings(string profile, bool enterProfile = true, bool openDialog = true)
        {
            if (enterProfile)
            {
                Enter(profile);
            }

            var followingsCount = GetFollowingsCount(profile);

            if (openDialog)
            {
                driver.Exec(driver.FindElement(By.XPath("//a[contains(@href,'/following/')]"), 60).Click,
                            successWhen: () => driver.Url.Contains("/following"));
            }

            var users = new HashSet <string>();

            var lastTimeFoundNewUser = DateTime.Now;

            while (users.Count < followingsCount)
            {
                if ((DateTime.Now - lastTimeFoundNewUser).Seconds >= 60)
                {
                    yield break;
                }

                foreach (var user in getUsers())
                {
                    if (users.Add(user))
                    {
                        lastTimeFoundNewUser = DateTime.Now;
                        yield return(user);
                    }
                }

                var liElements = driver.FindElements(By.CssSelector("ul > div:first-of-type > li span > a.notranslate"), 60);

                await ScrollDown.ScrollInto(driver, liElements.Last());
            }
        }