From b55e5268d5284bddf9ab7d549a1daad165adefa6 Mon Sep 17 00:00:00 2001 From: sibalzer Date: Sun, 28 Nov 2021 10:50:15 +0100 Subject: [PATCH] feat: save codes in a text file --- .gitignore | 1 + docker-compose.yml | 1 + primelooter.py | 17 +++++++++++++++++ 3 files changed, 19 insertions(+) diff --git a/.gitignore b/.gitignore index 682dede..46a6298 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,7 @@ *.log cookies.txt publishers.txt +game_codes.txt # Byte-compiled / optimized / DLL files __pycache__/ diff --git a/docker-compose.yml b/docker-compose.yml index 9831382..4edeb7d 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -7,5 +7,6 @@ services: volumes: - ./cookies.txt:/app/cookies.txt # must exist before launching - ./publishers.txt:/app/publishers.txt # must exist before launching + - ./game_codes.txt:/app/game_codes.txt # must exist before launching environment: - TZ=Europe/Berlin diff --git a/primelooter.py b/primelooter.py index 788d854..80ff34c 100644 --- a/primelooter.py +++ b/primelooter.py @@ -48,6 +48,11 @@ def __exit__(self, exc_type, exc_val, exc_tb): self.browser.close() self.playwright.__exit__() + @staticmethod + def code_to_file(game: str, code: str, instructions: str) -> None: + with open(f'./game_codes.txt', 'a') as f: + f.write(f"{game}: {code}\n ({instructions.replace('/n',' ')})") + @staticmethod def exists(tab: Page, selector: str) -> bool: if tab.query_selector(selector): @@ -127,6 +132,18 @@ def claim_external(self, url, publisher): if PrimeLooter.exists(tab, 'div.gms-success-modal-container'): log.info("Claimed %s (%s)", loot_name, game_name) + if PrimeLooter.exists(tab, 'div.get-my-stuff-modal-code-success'): + try: + code = tab.query_selector( + 'div.get-my-stuff-modal-code div[data-a-target="copy-code-input"] input').get_attribute('value').strip() + instructions = tab.query_selector( + 'div[data-a-target=gms-claim-instructions]').inner_text().strip() + PrimeLooter.code_to_file( + game_name, code, instructions) + except Exception as e: + log.warning( + "Could not get code for %s (%s) from %s", loot_name, game_name, publisher) + elif PrimeLooter.exists(tab, "div[data-test-selector=ProgressBarSection]"): log.warning( "Could not claim %s from %s by %s (account not connected)", loot_name, game_name, publisher)