visit("https://bscscan.com/contractsVerified"); sleep(3); Log::info("Running " . self::class); $this->jobRun = new JobRun([ "job_id" => $this->jobId, "success" => false, ]); $this->jobRun->save(); // $this->goToEpicGamesWebsite($browser); // $this->removePopups($browser); sleep(5); $this->signin($browser); $this->getFreeGames($browser); $this->jobRun->success = true; $this->jobRun->save(); Log::info(self::class . " run ended"); return $this->jobRun; } /** * @inheritDoc */ public function runTest(Browser $browser): ?JobRun { try { $this->goToEpicGamesWebsite($browser); sleep(2); $this->removePopups($browser); sleep(2); $this->signin($browser); return $this->makeSimpleJobRun( true, "Connexion réussie", "Datboi a réussi à se connecter sur EpicGames" ); } catch (Exception $e) { return $this->makeSimpleJobRun( true, "Connexion échouée", "Datboi n'a pas réussi à se connecter sur EpicGames :\n" . $e->getMessage() ); } } private function goToEpicGamesWebsite(Browser $browser) { sleep(3); $browser->visit(self::WEBSITE_URL); sleep(3); $this->assertNotDetected($browser); $browser->waitForText("Store", 30, true); } private function signin(Browser $browser) { $browser->visit("https://store.epicgames.com/login?state=%2Fen-US%2F"); sleep(5); $this->assertNotDetected($browser); $browser->waitForText("Sign In", 30, true); sleep(3); $jobInfos = JobInfo::where("job_id", $this->jobId)->get(); $email = $jobInfos->where("key", "epicgames_account_email")->first()->value; $password = $jobInfos->where("key", "epicgames_account_password")->first()->value; $browser->within(new EpicGamesLogin, function (Browser $browser) use ($email, $password) { $browser->fillForm($email, $password); }); sleep(40); } private function getFreeGames(Browser $browser) { $browser->visit('https://www.epicgames.com/store/en-US/free-games'); $browser->waitForText("Free Games", 30, true); $freeGamesLinkElements = $browser->driver->findElements(WebDriverBy::xpath('//a[contains(@aria-label, "Free Now")]')); $freeGamesLinks = []; foreach ($freeGamesLinkElements as $element) { $freeGamesLinks[] = $element->getAttribute("href"); } foreach ($freeGamesLinks as $link) { $browser->visit($link); $this->claimCurrentGame($browser); } } private function claimCurrentGame(Browser $browser) { sleep(5); $this->assertNotDetected($browser); if ($this->unratedContent($browser)) { throw new Exception("Le jeu demande un âge et datboi a la flemme de le mettre"); } $this->waitForAndClickElementContainingText($browser, '//button', "Get", 30, true); sleep(5); $this->assertNotDetected($browser); $browser->waitForText("Place Order", 30, true); $browser->click("Place Order"); sleep(5); $this->assertNotDetected($browser); $browser->waitForText("Order Confirmation", 30, true); $browser->click("Close"); sleep(5); AllNotification::send( new SimpleNotification($this->jobId, "Un jeu a été ajouté à votre bibliothèque", "Un jeu a été ajouté à votre bibliothèque EpicGames") ); } private function unratedContent(Browser $browser) { try { $browser->waitForText("please provide your date of birth", 5, true); return true; } catch (Exception $_) { return false; } } private function removePopups(Browser $browser) { // $browser->script('document.querySelector("div.app-modal")[0].remove();'); // $browser->driver->executeScript('document.querySelector("div.app-modal")[0].remove();'); } private function assertNotDetected(Browser $browser) { try { $browser->waitForText("One more step", 10, true); } catch (Exception $_) { return; } throw new Exception("Détecté par cloudflare"); } }