Untitled
unknown
csharp
2 years ago
7.0 kB
9
Indexable
using OpenQA.Selenium; using Selenium.WebDriver.UndetectedChromeDriver; using System.Diagnostics; using TwoCaptcha.Captcha; using System.Drawing; using OpenQA.Selenium.Chrome; using OpenQA.Selenium.Chrome.ChromeDriverExtensions; namespace EbayBot { class EbayBot { public Selenium.Extensions.SlDriver Driver; private WebDriverHelper DriverHelper; private Bot Sender; private bool CaptchaSolved = false; public IBotOptionsModel Options; public EbayBot(Bot sender, IBotOptionsModel options) { Sender = sender; Options = options; } public void Start(int threadIndex) { var chromeOptions = new ChromeOptions(); /*if (Sender.BotConfig.EnableProxy) { chromeOptions.AddHttpProxy( Options.Proxy.IpAddress, Options.Proxy.Port, Options.Proxy.Username, Options.Proxy.Password ); }*/ Driver = UndetectedChromeDriver.Instance(null, chromeOptions); DriverHelper = new WebDriverHelper(Driver); string status = ""; Debug.Print("Bot-Thread: " + threadIndex); Driver.Url = Options.StartPageUrl + Options.EbayLoginEmail; PressAcceptCookiesButton(); Login(); if (!CaptchaSolved) return; Driver.Wait(3); if (LoginError() || !IsLoggedIn()) { status = "Login für '" + Options.EbayLoginEmail + "' fehlgeschlagen!"; Debug.Print(status); Sender.ProcessStatus = new IStatusModel(status, Color.Red); return; } else { status = "Login für '" + Options.EbayLoginEmail + "' war erfolgreich!"; Debug.Print(status); Sender.ProcessStatus = new IStatusModel(status, Color.Green); } Driver.Wait(5); BeginFillFormular(); } private bool CookiesAccepted() { try { var btnAcceptCookies = Driver.FindElement(By.Id(Config.PageElements["id_banner"])); return btnAcceptCookies == null; } catch (Exception) { return true; } } private void PressAcceptCookiesButton() { DriverHelper.WaitForElement(Config.PageElements["id_banner"], "", 10); if (CookiesAccepted()) return; var btnAcceptCookies = Driver.FindElement(By.Id(Config.PageElements["id_banner"])); btnAcceptCookies.Click(); } private bool IsLoggedIn() { Debug.Print("Check if logged in already"); try { var userEmail = Driver.FindElement(By.Id("user-email")).Text; return userEmail.ToLower().Contains(Options.EbayLoginEmail); } catch (Exception) { return false; } } private bool LoginError() { try { var loginErrorH1 = Driver.FindElements(By.TagName("h1")); return loginErrorH1[0].Text.Contains("ungültig"); } catch (Exception) { return false; } } private void Login() { if (IsLoggedIn()) return; string status = "Anmelden bei " + Options.EbayLoginEmail + "..."; Debug.Print(status); Sender.ProcessStatus = Sender.ProcessStatus = new IStatusModel(status, Color.DimGray); Driver.Wait(5); var fieldEmail = Driver.FindElement(By.Id(Config.PageElements["id_login_email"])); var fieldPassword = Driver.FindElement(By.Id(Config.PageElements["id_login_password"])); var btnLoginSubmit = Driver.FindElement(By.Id(Config.PageElements["id_login_button"])); fieldEmail.SendKeys(Options.EbayLoginEmail); Driver.Wait(4); fieldPassword.SendKeys(Options.EbayLoginPassword); SolveCaptcha(); if (!CaptchaSolved) { return; } Debug.Print("Clicking login button"); btnLoginSubmit.Click(); } public void BeginFillFormular() { Debug.Print("Formular setup, Inserate: " + Options.Ads.Count); foreach (var adData in Options.Ads) { Debug.Print("Setting up formular for " + adData.AdTitle); var adFormular = new AdFormular(Driver, adData, Options); adFormular._EbayBot = this; adFormular.CreateAd(Sender); // 10 seconds Debug.Print("Nächstes Insert für " + adData.AdTitle); } } public string GetSolvedCaptchaAnswer(string captchaUrl = "") { string code = string.Empty; var solver = new TwoCaptcha.TwoCaptcha(Options.CaptchaSolverApiKey); var captcha = new ReCaptcha(); captcha.SetSiteKey(Options.ReCaptchaSiteKey); captcha.SetUrl(captchaUrl == "" ? Options.StartPageUrl : captchaUrl); try { solver.Solve(captcha).Wait(); code = captcha.Code; } catch (AggregateException e) { Sender.ProcessStatus = new IStatusModel("Captcha Api-Fehler: " + e.InnerExceptions.First().Message, Color.Red); Driver.Wait(10); } return code; } public void SolveCaptcha(string captchaUrl = "") { Debug.Print("Solving captcha..."); var solvedCaptchaAnswer = GetSolvedCaptchaAnswer(captchaUrl); if (solvedCaptchaAnswer == string.Empty) { Debug.Print("Captcha konnte nicht gelöst werden"); Sender.ProcessStatus = new IStatusModel("Captcha konnte nicht gelöst werden", Color.Red); CaptchaSolved = false; Driver.Wait(10); return; } CaptchaSolved = true; Debug.Print("Captcha answer: " + solvedCaptchaAnswer); Driver.ExecuteScript("document.getElementById('g-recaptcha-response').innerHTML = '" + solvedCaptchaAnswer + "'"); Debug.Print("Captcha solved!"); Driver.Wait(2); } } }
Editor is loading...