From 06291d0f104b641c655dd0d4a8885fc562567948 Mon Sep 17 00:00:00 2001 From: bbtufty Date: Sun, 27 Oct 2024 09:02:36 +0000 Subject: [PATCH] Further fixes for link shortening - Further fixes for link shortening --- CHANGES.rst | 1 + nxbrew_dl/util/download_tools.py | 16 ++++++++++++---- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/CHANGES.rst b/CHANGES.rst index 30b8273..7d58074 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -2,6 +2,7 @@ ================ - Exclude log folder so pip builds successfully [#16] +- Further fixes for link shortening [#15] 0.3 (2024-10-26) ================ diff --git a/nxbrew_dl/util/download_tools.py b/nxbrew_dl/util/download_tools.py index 497481c..5585b08 100644 --- a/nxbrew_dl/util/download_tools.py +++ b/nxbrew_dl/util/download_tools.py @@ -1,3 +1,4 @@ +import random import re import time from urllib.parse import urlparse @@ -368,7 +369,7 @@ def RecaptchaV3(): def bypass_ouo( url, logger=None, - impersonate="safari", + impersonate=None, n_retry=0, max_retries=5, ): @@ -378,7 +379,8 @@ def bypass_ouo( url (str): URL to bypass logger (logging.Logger): Logger to use. Defaults to None, which will not log anything - impersonate (str): Type of browser to impersonate + impersonate (str): Type of browser to impersonate. Defaults + to None, which will choose randomly from a selection n_retry (int): Current retry. Defaults to 0 max_retries (int): Maximum number of retries. Defaults to 5 """ @@ -386,6 +388,9 @@ def bypass_ouo( if n_retry >= max_retries: raise ValueError("Max retries exceeded!") + if impersonate is None: + impersonate = random.choice(["chrome", "safari", "edge"]) + client = cffi_requests.Session() client.headers.update( { @@ -427,12 +432,15 @@ def bypass_ouo( bs4 = BeautifulSoup(res.content, "lxml") - # Try and find the token. If we don't find anything, assume - # it's broken and try again + # Try and find the token inputs = None try: inputs = bs4.form.findAll("input", {"name": re.compile(r"token$")}) except AttributeError: + pass + + # Catch problems here + if inputs is None: if logger is not None: logger.warning(f"Page load error. Waiting then retrying")