public static async Task Run() { foreach (string profileName in GenshinSharedUtils.ProfileNames) { try { Console.WriteLine("Profile: " + profileName); var profilePath = Paths.GetChromiumUserDataDir(profileName); PptrUtils.ProfilePath = profilePath; _page = PptrUtils.Page; const string url = "https://webstatic-sea.mihoyo.com/ys/event/e20211203-album/index.html"; await _page.GoToAsync(url, WaitUntilNavigation.Load); if (!await GenshinSharedUtils.CheckAuth(_page)) { throw new Exception("Auth problem!"); } Thread.Sleep(30000); /* wait animation */ await PptrUtils.WaitAndClick("div.main-button.main-button__left", PptrUtils.LongSelectorAwaiter); Thread.Sleep(3000); ElementHandle[] dayDivs = (await _page.QuerySelectorAllAsync("div")) .Where(div => div.EvaluateFunctionAsync <string>("e => e.className").Result.Contains("day-list-item")) .ToArray(); foreach (ElementHandle dayDiv in dayDivs) { await dayDiv.ClickAsync(); Thread.Sleep(1000); ElementHandle[] getDivs = (await _page.QuerySelectorAllAsync("div")) .Where(div => div.EvaluateFunctionAsync <string>("e => e.innerHTML").Result == "Получить") .ToArray(); foreach (ElementHandle getDiv in getDivs) { await getDiv.ClickAsync(); Thread.Sleep(1000); } } _page.QuerySelectorAsync("div[class^='components-topNav-assets-__topNav_---close-btn---']").Result .ClickAsync().GetAwaiter().GetResult(); Thread.Sleep(3000); await PptrUtils.WaitAndClick("div.main-button.main-button__right", PptrUtils.LongSelectorAwaiter); Thread.Sleep(3000); (await _page.QuerySelectorAllAsync("div")) .FirstOrDefault(div => div.EvaluateFunctionAsync <string>("e => e.innerHTML").Result == "Отмена") ?.ClickAsync().GetAwaiter().GetResult(); Thread.Sleep(1000); await PptrUtils.WaitAndClick("div.button-spot__progress", PptrUtils.LongSelectorAwaiter); Thread.Sleep(3000); ElementHandle[] awardIcons = await _page.QuerySelectorAllAsync("div[class^='components-award-assets-__award_---icon---'"); foreach (ElementHandle awardIcon in awardIcons) { await awardIcon.ClickAsync(); Thread.Sleep(1000); //grab award (await _page.QuerySelectorAllAsync("div")) .FirstOrDefault(div => div.EvaluateFunctionAsync <string>("e => e.innerHTML").Result == "Получить") ?.ClickAsync().GetAwaiter().GetResult(); Thread.Sleep(1000); await PptrUtils.ClickIfExists("div[class^='components-result-assets-__result_---click-close---'"); } Console.WriteLine("debug"); } catch (Exception e) { Console.WriteLine(e); } finally { await PptrUtils.CloseAsync(); } } }
public static async Task Run() { await GrabAnswers(); foreach (string profileName in GenshinSharedUtils.ProfileNames) { try { Console.WriteLine("Profile: " + profileName); var profilePath = Paths.GetChromiumUserDataDir(profileName); PptrUtils.ProfilePath = profilePath; _page = PptrUtils.Page; const string url = "https://webstatic-sea.hoyoverse.com/ys/event/answer-question/index.html?activity_no=2f151b0c13924d49#"; await _page.GoToAsync(url, WaitUntilNavigation.Load); Thread.Sleep(5310); //wait error message disappear // if (!await GenshinSharedUtils.CheckAuth(_page)) throw new Exception("Auth problem!"); await PptrUtils.ClickIfExists("p.top-btn-title"); const string questionSelector = "p[class^='components-game-assets-qa-info___title--'] p[class^='components-game-assets-qa-info___text--']"; const string variantsSelector = "div[class^='components-game-assets-qa-info___options-item--'][class^='components-game-assets-qa-info___options-']"; var variantCleaner = new Regex(@"^[A-Z]+\.\s"); for (int i = 0; i < 11; i++) { Thread.Sleep(3555); //wait animation var questionTag = await _page.QuerySelectorAsync(questionSelector); if (questionTag == null) { continue; } var questionText = await questionTag.EvaluateFunctionAsync <string>("e => e.innerText"); questionText = ProcessString(questionText); var answers = QaDict.Where(qa => qa[0] == questionText).ToList(); if (answers.Count == 0) { #if (DEBUG) Console.WriteLine("Unknown question: " + questionText); #endif #if (!DEBUG) throw new Exception("Unknown question: " + questionText); #endif } var variants = await _page.QuerySelectorAllAsync(variantsSelector); bool answered = false; foreach (var variant in variants) { var variantText = await variant.EvaluateFunctionAsync <string>("e => e.innerText"); variantText = variantCleaner.Replace(variantText, ""); variantText = ProcessString(variantText); bool isRight = answers.Any(qa => qa[1] == variantText); if (!isRight) { continue; } answered = true; await variant.ClickAsync(); break; } if (answered) { continue; } foreach (var variant in variants) { var variantText = await variant.EvaluateFunctionAsync <string>("e => e.innerText"); variantText = variantCleaner.Replace(variantText, ""); variantText = ProcessString(variantText); bool isSimilar = answers.Any(qa => CalculateSimilarity(variantText, qa[1]) > 0.5); if (!isSimilar) { continue; } await variant.ClickAsync(); break; } } } catch (Exception e) { Console.WriteLine(e); } finally { await PptrUtils.CloseAsync(); } } }