Download correct gecko-driver for the platform + fix setting executable path when running in Docker

Fixes #232
pull/233/head
Patrick Robertson 2025-03-03 15:41:44 +00:00
rodzic 011ded2bde
commit dea0a49600
3 zmienionych plików z 29 dodań i 12 usunięć

Wyświetl plik

@ -7,16 +7,26 @@ ENV RUNNING_IN_DOCKER=1 \
PYTHONFAULTHANDLER=1 \ PYTHONFAULTHANDLER=1 \
PATH="/root/.local/bin:$PATH" PATH="/root/.local/bin:$PATH"
ARG TARGETARCH
# Installing system dependencies # Installing system dependencies
RUN add-apt-repository ppa:mozillateam/ppa && \ RUN add-apt-repository ppa:mozillateam/ppa && \
apt-get update && \ apt-get update && \
apt-get install -y --no-install-recommends gcc ffmpeg fonts-noto exiftool && \ apt-get install -y --no-install-recommends gcc ffmpeg fonts-noto exiftool && \
apt-get install -y --no-install-recommends firefox-esr && \ apt-get install -y --no-install-recommends firefox-esr && \
ln -s /usr/bin/firefox-esr /usr/bin/firefox && \ ln -s /usr/bin/firefox-esr /usr/bin/firefox
wget https://github.com/mozilla/geckodriver/releases/download/v0.35.0/geckodriver-v0.35.0-linux64.tar.gz && \
ARG GECKODRIVER_VERSION=0.35.0
RUN if [ $(uname -m) = "aarch64" ]; then \
GECKODRIVER_ARCH=linux-aarch64; \
else \
GECKODRIVER_ARCH=linux64; \
fi && \
wget https://github.com/mozilla/geckodriver/releases/download/v${GECKODRIVER_VERSION}/geckodriver-v${GECKODRIVER_VERSION}-${GECKODRIVER_ARCH}.tar.gz && \
tar -xvzf geckodriver* -C /usr/local/bin && \ tar -xvzf geckodriver* -C /usr/local/bin && \
chmod +x /usr/local/bin/geckodriver && \ chmod +x /usr/local/bin/geckodriver && \
rm geckodriver-v* && \
apt-get clean && \ apt-get clean && \
rm -rf /var/lib/apt/lists/* rm -rf /var/lib/apt/lists/*

Wyświetl plik

@ -105,8 +105,8 @@ class BaseModule(ABC):
for key in self.authentication.keys(): for key in self.authentication.keys():
if key in site or site in key: if key in site or site in key:
logger.debug(f"Could not find exact authentication information for site '{site}'. \ logger.debug(f"Could not find exact authentication information for site '{site}'. \
did find information for '{key}' which is close, is this what you meant? \ did find information for '{key}' which is close, is this what you meant? \
If so, edit your authentication settings to make sure it exactly matches.") If so, edit your authentication settings to make sure it exactly matches.")
def get_ytdlp_cookiejar(args): def get_ytdlp_cookiejar(args):
import yt_dlp import yt_dlp

Wyświetl plik

@ -1,18 +1,22 @@
""" This Webdriver class acts as a context manager for the selenium webdriver. """ """ This Webdriver class acts as a context manager for the selenium webdriver. """
from __future__ import annotations from __future__ import annotations
from selenium import webdriver
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.common.proxy import Proxy, ProxyType
from selenium.webdriver.common.print_page_options import PrintOptions
from loguru import logger import os
from selenium.webdriver.common.by import By
import time import time
#import domain_for_url #import domain_for_url
from urllib.parse import urlparse, urlunparse from urllib.parse import urlparse, urlunparse
from http.cookiejar import MozillaCookieJar from http.cookiejar import MozillaCookieJar
from selenium import webdriver
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.common.proxy import Proxy, ProxyType
from selenium.webdriver.common.print_page_options import PrintOptions
from selenium.webdriver.common.by import By
from loguru import logger
class CookieSettingDriver(webdriver.Firefox): class CookieSettingDriver(webdriver.Firefox):
facebook_accept_cookies: bool facebook_accept_cookies: bool
@ -20,6 +24,10 @@ class CookieSettingDriver(webdriver.Firefox):
cookiejar: MozillaCookieJar cookiejar: MozillaCookieJar
def __init__(self, cookies, cookiejar, facebook_accept_cookies, *args, **kwargs): def __init__(self, cookies, cookiejar, facebook_accept_cookies, *args, **kwargs):
if os.environ.get('RUNNING_IN_DOCKER'):
# Selenium doesn't support linux-aarch64 driver, we need to set this manually
kwargs['service'] = webdriver.FirefoxService(executable_path='/usr/local/bin/geckodriver')
super(CookieSettingDriver, self).__init__(*args, **kwargs) super(CookieSettingDriver, self).__init__(*args, **kwargs)
self.cookies = cookies self.cookies = cookies
self.cookiejar = cookiejar self.cookiejar = cookiejar
@ -90,7 +98,6 @@ class Webdriver:
setattr(self.print_options, k, v) setattr(self.print_options, k, v)
def __enter__(self) -> webdriver: def __enter__(self) -> webdriver:
options = webdriver.FirefoxOptions() options = webdriver.FirefoxOptions()
options.add_argument("--headless") options.add_argument("--headless")
options.add_argument(f'--proxy-server={self.http_proxy}') options.add_argument(f'--proxy-server={self.http_proxy}')