Cardmarket wird ausgelesen
CSV für Post wird erstellt
This commit is contained in:
@@ -5,8 +5,7 @@ using OpenQA.Selenium;
|
||||
using System.Diagnostics;
|
||||
using System.Net;
|
||||
using System.Text;
|
||||
|
||||
Console.WriteLine("Hello, World!");
|
||||
using static System.Collections.Specialized.BitVector32;
|
||||
|
||||
/*
|
||||
*
|
||||
@@ -16,11 +15,26 @@ userPassword: Magnatpower310!!
|
||||
/de/OnePiece/PostGetAction/User_Login
|
||||
*/
|
||||
|
||||
namespace CardmarketBot
|
||||
{
|
||||
internal class Programm
|
||||
{
|
||||
|
||||
static void Main(string[] args)
|
||||
{
|
||||
|
||||
Dictionary<string, Helper.Porto> portoberechnung = new Dictionary<string, Helper.Porto>()
|
||||
{
|
||||
{"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");
|
||||
ChromeDriver cd = new ChromeDriver(options);
|
||||
IWebDriver cd = new ChromeDriver(options);
|
||||
cd.Url = @"https://www.cardmarket.com/de/OnePiece";
|
||||
|
||||
cd.Navigate();
|
||||
@@ -42,6 +56,211 @@ foreach (var c in cd.Manage().Cookies.AllCookies)
|
||||
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<string> ids = new List<string>();
|
||||
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<Kunde> kunden = new List<Kunde>();
|
||||
|
||||
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<IGrouping<Helper.Porto, Kunde>> groupedPorto = kunden.GroupBy(x => x.Versandskosten).Distinct();
|
||||
|
||||
foreach(IGrouping<Helper.Porto, Kunde> 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<Artikel> ParseArtikeln(string text)
|
||||
{
|
||||
List<Artikel> result = new List<Artikel>();
|
||||
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<Artikel> artikels = new List<Artikel>();
|
||||
|
||||
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<Artikel> 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";
|
||||
@@ -58,3 +277,5 @@ string GetHashKey(string line)
|
||||
var a = d.Substring(0, m);
|
||||
return a;
|
||||
}
|
||||
|
||||
*/
|
||||
Reference in New Issue
Block a user