Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using OpenQA.Selenium;
- using OpenQA.Selenium.Chrome;
- using OpenQA.Selenium.Firefox;
- using OpenQA.Selenium.PhantomJS;
- using OpenQA.Selenium.Safari;
- using System;
- using System.Collections;
- using System.Collections.Generic;
- using System.IO;
- using System.Linq;
- using System.Text;
- using System.Text.RegularExpressions;
- using System.Threading.Tasks;
- namespace Twitter_Follower_Scraper
- {
- class Program
- {
- private static string user = "razvanvasiliu@hotmail.com";
- private static string pass = "parolamea";
- private static string userLink = "https://twitter.com/om_officiel";
- //private static string userLink = "https://twitter.com/arayphotodesign";
- private static ArrayList followerList = new ArrayList();
- private static StreamWriter streamWriter;
- private static int step = 0;
- static void Main(string[] args)
- {
- try {
- streamWriter = new StreamWriter("followers.csv");
- }
- catch(IOException e)
- {
- Console.WriteLine(e.Message);
- }
- /*
- var options = new ChromeOptions();
- var service = ChromeDriverService.CreateDefaultService();
- options.AddUserProfilePreference("profile.managed_default_content_settings.images", 2);
- IWebDriver webDriver = new ChromeDriver(service, options);
- */
- try {/*
- FirefoxBinary firefoxbin = new FirefoxBinary("C:/Program Files (x86)/Mozilla Firefox/firefox.exe");
- IWebDriver webDriver = new FirefoxDriver(firefoxbin, null);
- */
- IWebDriver webDriver = new SafariDriver();
- twitterLogin(webDriver);
- webDriver.Close();
- }
- catch(NullReferenceException e)
- {
- Console.WriteLine(e.Message);
- Console.ReadLine();
- }
- streamWriter.Close();
- }
- public static string RemoveChars(string key)
- {
- return Regex.Replace(key, "[^\\d]", "");
- }
- public static void RemoveElement(IWebDriver webDriver)
- {
- //((IJavaScriptExecutor)webDriver).ExecuteScript("var elements = document.getElementsByClassName('js-stream-item');while(elements.length > 0){elements[0].parentNode.removeChild(elements[0]);}");
- ((IJavaScriptExecutor)webDriver).ExecuteScript("var elements = document.getElementsByClassName('GridTimeline-items')[0].getElementsByClassName('Grid Grid--withGutter');while(elements.length > 0){elements[0].parentNode.removeChild(elements[0]);}");
- ((IJavaScriptExecutor)webDriver).ExecuteScript("window.scrollBy(0,document.body.scrollHeight)", "");
- ((IJavaScriptExecutor)webDriver).ExecuteScript("window.scrollBy(0,-document.body.scrollHeight)", "");
- ((IJavaScriptExecutor)webDriver).ExecuteScript("window.scrollBy(0,document.body.scrollHeight)", "");
- ((IJavaScriptExecutor)webDriver).ExecuteScript("window.scrollBy(0,-document.body.scrollHeight)", "");
- }
- private static void twitterLogin(IWebDriver webDriver)
- {
- webDriver.Navigate().GoToUrl("http://www.twitter.com/login");
- IWebElement userInput = webDriver.FindElement(By.CssSelector(".js-username-field.email-input.js-initial-focus"));
- IWebElement passwordInput = webDriver.FindElement(By.ClassName("js-password-field"));
- userInput.SendKeys(user);
- webDriver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(1));
- passwordInput.SendKeys(pass);
- webDriver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(1));
- passwordInput.Submit();
- webDriver.Navigate().GoToUrl(userLink);
- IWebElement followersLink = webDriver.FindElement(By.CssSelector(".ProfileNav-item.ProfileNav-item--followers")).FindElement(By.TagName("a"));
- followersLink.Click();
- webDriver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(10));
- IWebElement followersNumberElement = webDriver.FindElement(By.CssSelector(".ProfileNav-item.ProfileNav-item--followers.is-active")).FindElement(By.TagName("a"));
- Console.WriteLine(RemoveChars(followersNumberElement.GetAttribute("title")).Replace(".", ""));
- int followersNumber = Int32.Parse(RemoveChars(followersNumberElement.GetAttribute("title")).Replace(".", ""));
- if (followersNumberElement != null)
- Console.WriteLine("Followers number: " + followersNumber);
- else
- Console.WriteLine("No such element.");
- int written = 0;
- while (written < followersNumber)
- {
- IList<IWebElement> loadedFollowers = webDriver.FindElements(By.CssSelector(".ProfileCard-screennameLink.u-linkComplex.js-nav"));
- foreach (IWebElement element in loadedFollowers)
- {
- written++;
- string followerStr = element.GetAttribute("textContent").Replace(" ", "").Replace("\n", "").Replace("\r", "");
- streamWriter.Write(followerStr + ",\n");
- }
- webDriver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(10));
- ((IJavaScriptExecutor)webDriver).ExecuteScript("window.scrollTo(0, document.body.scrollHeight)");
- Console.WriteLine("> Followers loaded on page: " + webDriver.FindElements(By.CssSelector(".ProfileCard-screennameLink.u-linkComplex.js-nav")).Count + " ( " + (float)(100.0f* webDriver.FindElements(By.CssSelector(".ProfileCard-screennameLink.u-linkComplex.js-nav")).Count)/followersNumber + "% ) ");
- Console.WriteLine("> Followers EXTRACTED: " + written + " ( " + (float)(100.0f * written) / followersNumber + "% ) ");
- RemoveElement(webDriver);
- }
- Console.WriteLine("Finished");
- /*
- bool ok = false;
- while(true)
- {
- webDriver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(10));
- IList<IWebElement> loadedFollowers = webDriver.FindElements(By.CssSelector(".ProfileCard-screennameLink.u-linkComplex.js-nav"));
- Console.WriteLine("Number of followers loadad: " + followerList.Count);
- for(int e = 0; e < loadedFollowers.Count; e++)
- {
- IWebElement element = loadedFollowers[e];
- if (element.GetAttribute("textContent") != null && !element.GetAttribute("textContent").Equals(""))
- {
- string followerStr = element.GetAttribute("textContent").Replace(" ", "").Replace("\n", "");
- if (!followerList.Contains(followerStr))
- {
- //Console.WriteLine(followerStr);
- followerList.Add(followerStr);
- streamWriter.Write(followerStr.Replace("\r", "") + ",\n");
- }
- }
- }
- IJavaScriptExecutor js = (IJavaScriptExecutor)webDriver;
- js.ExecuteScript("window.scrollTo(0, document.body.scrollHeight);");
- if ((step != 0 && followerList.Count > loadedFollowers.Count) && ok)
- step += loadedFollowers.Count - followerList.Count;
- else
- ok = true;
- }
- */
- }
- }
- internal interface IWebElements
- {
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement