// See https://aka.ms/new-console-template for more information using OpenQA.Selenium.Chrome; using OpenQA.Selenium; using System.Diagnostics; using System.Net; using System.Text; using static System.Collections.Specialized.BitVector32; /* * * referalPage: /de/OnePiece username: Skywalkerex userPassword: Magnatpower310!! /de/OnePiece/PostGetAction/User_Login */ namespace CardmarketBot { internal class Programm { static void Main(string[] args) { Dictionary portoberechnung = new Dictionary() { {"1,15 €", Helper.Porto.BRIEF085 }, {"1,30 €", Helper.Porto.BRIEF100 }, {"2,10 €", Helper.Porto.BRIEF160 }, {"3,25 €", Helper.Porto.BRIEF275 }, {"2,60 €", Helper.Porto.PRIO210 }, {"3,20 €", Helper.Porto.PRIO270 }, }; ChromeOptions options = new ChromeOptions(); options.AddArgument("start-maximized"); IWebDriver cd = new ChromeDriver(options); cd.Url = @"https://www.cardmarket.com/de/OnePiece"; cd.Navigate(); cd.FindElement(By.CssSelector("#CookiesConsent > div > div > form > button")).Click(); cd.FindElement(By.Name("username")).Click(); cd.FindElement(By.Name("username")).SendKeys("Skywalkerex"); cd.FindElement(By.Name("userPassword")).Click(); cd.FindElement(By.Name("userPassword")).SendKeys("Magnatpower310!!"); cd.FindElement(By.CssSelector("#header-login > input.btn.AB-login-btn.btn-outline-primary.btn-sm")).Click(); CookieContainer cookieContainer = new CookieContainer(); foreach (var c in cd.Manage().Cookies.AllCookies) { string name = c.Name; string value = c.Value; cookieContainer.Add(new System.Net.Cookie(name, value, c.Path, c.Domain)); } //cd.Navigate().GoToUrl(@"https://www.cardmarket.com/de/OnePiece/Orders/Sales/Paid"); cd.Navigate().GoToUrl(@"https://www.cardmarket.com/de/OnePiece/Orders/Sales/Sent"); IWebElement element = cd.FindElement(By.XPath("/html/body/main/section/div[3]/div[3]/div[2]")); string content = element.Text; string[] datas = content.Split("\r\n"); List ids = new List(); for(int i =0; i < datas.Length; i+= 7) { ids.Add(datas[i]); } //cd.Navigate().GoToUrl(@"https://www.cardmarket.com/de/OnePiece/Orders/1117521790"); Debugger.Break(); List kunden = new List(); int maxCounter = 4; int counter = 0; foreach (string id in ids) { if (counter > maxCounter) break; Thread.Sleep(TimeSpan.FromSeconds(5)); Console.WriteLine(id); cd.Navigate().GoToUrl(string.Format(@"https://www.cardmarket.com/de/OnePiece/Orders/{0}", id)); element = cd.FindElement(By.XPath("/html/body/main/section/div/div[1]/div/div[3]/div[2]/div[2]/div/div")); Kunde kunde = Helper.ConvertToKunde(element.Text); // Versandkosten element = cd.FindElement(By.XPath("/html/body/main/section/div/div[1]/div/div[3]/div[1]/div[2]/div/div[3]/span[2]")); kunde.Versandskosten = portoberechnung[element.Text]; kunde.BestellungID = id; // Artikeln element = cd.FindElement(By.XPath("/html/body/main/section/div/div[1]/div/div[5]/table/tbody")); string artikeln = element.Text; kunde.Artikels = Helper.ParseArtikeln(element.Text); kunden.Add(kunde); counter++; } IEnumerable> groupedPorto = kunden.GroupBy(x => x.Versandskosten).Distinct(); foreach(IGrouping gkunde in groupedPorto) { //FileStream stream = File.Create(string.Format("test_{0}.csv", gkunde.Key.ToString())); Helper.Porto porto = gkunde.Key; using (StreamWriter writer = new StreamWriter(string.Format("./test_{0}.csv", gkunde.Key.ToString()),false,Encoding.Latin1)) { string header = "NAME;ZUSATZ;STRASSE;NUMMER;PLZ;STADT;LAND;ADRESS_TYP;REFERENZ"; writer.WriteLine(header); string absender = "W&W TECH UG;Lukas Winkelmann;Schwedenschanze;70;49808;LINGEN;DEU;HOUSE"; writer.WriteLine(absender); foreach (Kunde n in gkunde) { string empfanger = string.Format("{0};{1};{2};{3};{4};{5};{6};{7};{8}", n.Name, "", n.Strasse, n.Hausnummer, n.Plz, n.Ort, "DEU", //n.Land, "HOUSE", n.BestellungID ); writer.WriteLine(empfanger); } writer.Close(); } } Console.WriteLine("Fertig"); Console.ReadLine(); } } } static class Helper { public enum Porto { BRIEF085, BRIEF100, BRIEF160, BRIEF275, PRIO210, PRIO270 } internal static Kunde ConvertToKunde(string text) { string[] datas = text.Split("\r\n"); string name = datas[0]; string adresseUNDHausnummer = datas[1]; string plzUNDOrt = datas[2]; string land = datas[3]; datas = plzUNDOrt.Split(" "); string plz = datas[0]; string ort = datas[1]; datas = adresseUNDHausnummer.Split(" "); string strasse = ""; for(int i = 0; i < datas.Length - 1; i++) { strasse += datas[i] + " "; } strasse = strasse.Trim(); string hausnummer = datas[datas.Length -1]; return new Kunde(name,strasse,hausnummer, plz, ort,land); } internal static List ParseArtikeln(string text) { List result = new List(); string[] datas = text.Split("\r\n"); int anzahl = datas.Length / 6; for(int i = 0; i < datas.Length; i+=6) { Artikel temp = new Artikel(); var xFound = datas[i].IndexOf("x"); var am = datas[i].Substring(0, xFound); temp.Amount = Convert.ToInt32(am); temp.GERName = datas[i].Substring(xFound+1); temp.ENGName = datas[i+1]; temp.CardNumber = datas[i+2]; temp.Source = datas[i+3]; temp.Raritaet = datas[i+4]; temp.Preis = datas[i+5]; result.Add(temp); } return result; } } internal class Artikel { public int Amount { get; set; } public string GERName { get; set; } = ""; public string ENGName { get; set; } = ""; public string CardNumber { get; set; } = ""; public string Source { get; set; } = ""; public string Raritaet { get; set; } = ""; public string Preis { get; set; } = ""; } class Kunde { string bestellungID = ""; Helper.Porto versandskosten; string name; string strasse; string hausnummer; string plz; string ort; string land; List artikels = new List(); public string Name { get => name; set => name = value; } public string Strasse { get => strasse; set => strasse = value; } public string Plz { get => plz; set => plz = value; } public string Ort { get => ort; set => ort = value; } public string Land { get => land; set => land = value; } public string BestellungID { get => bestellungID; set => bestellungID = value; } public Helper.Porto Versandskosten { get => versandskosten; set => versandskosten = value; } public string Hausnummer { get => hausnummer; set => hausnummer = value; } internal List Artikels { get => artikels; set => artikels = value; } public Kunde(string Name, string Strasse,string Hausnummer, string PLZ, string Ort, string Land) { name = Name; hausnummer = Hausnummer; strasse = Strasse; plz = PLZ; ort = Ort; land = Land; } } /* HttpWebRequest hwr = (HttpWebRequest)HttpWebRequest.Create(@"https://www.cardmarket.com/de/OnePiece/Orders/Sales/Paid"); hwr.CookieContainer = cookieContainer; hwr.Method = "GET"; hwr.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"; WebResponse wr = hwr.GetResponse(); string s = new StreamReader(wr.GetResponseStream()).ReadToEnd(); Console.WriteLine(s); string GetHashKey(string line) { var x = line.IndexOf("__cmtkn"); var d = line.Substring(x + 16); var m = d.IndexOf("\""); var a = d.Substring(0, m); return a; } */