mirror of
https://github.com/Second-Hand-Friends/kleinanzeigen-bot.git
synced 2026-03-12 10:31:50 +01:00
@@ -4,6 +4,7 @@ SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
"""
|
||||
import atexit, copy, getopt, glob, json, logging, os, signal, sys, textwrap, time, urllib
|
||||
from datetime import datetime
|
||||
import importlib.metadata
|
||||
from logging.handlers import RotatingFileHandler
|
||||
from typing import Any, Dict, Final, Iterable
|
||||
|
||||
@@ -20,11 +21,6 @@ LOG_ROOT:Final[logging.Logger] = logging.getLogger()
|
||||
LOG:Final[logging.Logger] = logging.getLogger("kleinanzeigen_bot")
|
||||
LOG.setLevel(logging.INFO)
|
||||
|
||||
try:
|
||||
from .version import version as VERSION
|
||||
except ModuleNotFoundError:
|
||||
VERSION = "unknown"
|
||||
|
||||
|
||||
class KleinanzeigenBot(SeleniumMixin):
|
||||
|
||||
@@ -50,7 +46,9 @@ class KleinanzeigenBot(SeleniumMixin):
|
||||
def __del__(self):
|
||||
if self.file_log:
|
||||
LOG_ROOT.removeHandler(self.file_log)
|
||||
super().__del__()
|
||||
|
||||
def get_version(self) -> str:
|
||||
return importlib.metadata.version(__package__)
|
||||
|
||||
def run(self, args:Iterable[str]) -> None:
|
||||
self.parse_args(args)
|
||||
@@ -58,7 +56,7 @@ class KleinanzeigenBot(SeleniumMixin):
|
||||
case "help":
|
||||
self.show_help()
|
||||
case "version":
|
||||
print(VERSION)
|
||||
print(self.get_version())
|
||||
case "verify":
|
||||
self.configure_file_logging()
|
||||
self.load_config()
|
||||
@@ -85,6 +83,8 @@ class KleinanzeigenBot(SeleniumMixin):
|
||||
def show_help(self) -> None:
|
||||
if is_frozen():
|
||||
exe = sys.argv[0]
|
||||
elif os.getenv("PDM_PROJECT_ROOT", ""):
|
||||
exe = "pdm run app"
|
||||
else:
|
||||
exe = "python -m kleinanzeigen_bot"
|
||||
|
||||
@@ -143,6 +143,8 @@ class KleinanzeigenBot(SeleniumMixin):
|
||||
self.file_log.setFormatter(logging.Formatter('%(asctime)s [%(levelname)s] %(message)s'))
|
||||
LOG_ROOT.addHandler(self.file_log)
|
||||
|
||||
LOG.info("App version: %s", self.get_version())
|
||||
|
||||
def load_ads(self, exclude_inactive = True, exclude_undue = True) -> Iterable[Dict[str, Any]]:
|
||||
LOG.info("Searching for ad files...")
|
||||
|
||||
|
||||
@@ -2,9 +2,8 @@
|
||||
Copyright (C) 2022 Sebastian Thomschke and contributors
|
||||
SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
"""
|
||||
import logging, os, shutil, sys, tempfile
|
||||
import logging, os, shutil, sys
|
||||
from typing import Any, Callable, Dict, Final, Iterable, Tuple
|
||||
from importlib.resources import read_text as get_resource_as_string
|
||||
|
||||
from selenium import webdriver
|
||||
from selenium.common.exceptions import NoSuchElementException, TimeoutException
|
||||
@@ -22,7 +21,7 @@ from webdriver_manager.chrome import ChromeDriverManager
|
||||
from webdriver_manager.microsoft import EdgeChromiumDriverManager
|
||||
from webdriver_manager.utils import ChromeType
|
||||
|
||||
from .utils import ensure, is_frozen, pause
|
||||
from .utils import ensure, pause
|
||||
|
||||
LOG:Final[logging.Logger] = logging.getLogger("kleinanzeigen_bot.selenium_mixin")
|
||||
|
||||
@@ -34,10 +33,6 @@ class SeleniumMixin:
|
||||
self.browser_binary_location:str = None
|
||||
self.webdriver:WebDriver = None
|
||||
|
||||
def __del__(self):
|
||||
if getattr(self, 'cacertfile', None):
|
||||
os.remove(self.cacertfile)
|
||||
|
||||
def create_webdriver_session(self) -> None:
|
||||
LOG.info("Creating WebDriver session...")
|
||||
|
||||
@@ -68,27 +63,6 @@ class SeleniumMixin:
|
||||
LOG.info(" -> Chrome binary location: %s", self.browser_binary_location)
|
||||
return browser_options
|
||||
|
||||
# if run via py2exe fix resource lookup
|
||||
if is_frozen():
|
||||
import pathlib # pylint: disable=import-outside-toplevel
|
||||
|
||||
if not os.getenv("REQUESTS_CA_BUNDLE", None) or not os.path.exists(os.getenv("REQUESTS_CA_BUNDLE", None)):
|
||||
with tempfile.NamedTemporaryFile(delete = False) as tmp:
|
||||
LOG.debug("Writing cacert file to [%s]...", tmp.name)
|
||||
tmp.write(get_resource_as_string("certifi", "cacert.pem").encode('utf-8'))
|
||||
self.cacertfile = tmp.name
|
||||
os.environ['REQUESTS_CA_BUNDLE'] = self.cacertfile
|
||||
|
||||
read_text_orig = pathlib.Path.read_text
|
||||
|
||||
def read_text_new(self, encoding = None, errors = None):
|
||||
path = str(self)
|
||||
if "selenium_stealth" in path:
|
||||
return get_resource_as_string("selenium_stealth", self.name)
|
||||
return read_text_orig(self, encoding, errors)
|
||||
|
||||
pathlib.Path.read_text = read_text_new
|
||||
|
||||
# check if a chrome driver is present already
|
||||
if shutil.which(DEFAULT_CHROMEDRIVER_PATH):
|
||||
self.webdriver = webdriver.Chrome(options = init_browser_options(webdriver.ChromeOptions()))
|
||||
|
||||
Reference in New Issue
Block a user