Reload the page in case fullscreen ads is displayed

This commit is contained in:
sebthom
2022-02-17 17:03:10 +01:00
parent 10ab127076
commit e4226288d3
4 changed files with 47 additions and 4 deletions

View File

@@ -9,8 +9,9 @@ import importlib.metadata
from logging.handlers import RotatingFileHandler from logging.handlers import RotatingFileHandler
from typing import Any, Final from typing import Any, Final
from overrides import overrides
from ruamel.yaml import YAML from ruamel.yaml import YAML
from selenium.common.exceptions import NoSuchElementException from selenium.common.exceptions import NoSuchElementException, TimeoutException
from selenium.webdriver.common.by import By from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support import expected_conditions as EC
@@ -279,7 +280,7 @@ class KleinanzeigenBot(SeleniumMixin):
def login(self) -> None: def login(self) -> None:
LOG.info("Logging in as [%s]...", self.config["login"]["username"]) LOG.info("Logging in as [%s]...", self.config["login"]["username"])
self.web_open(f"{self.root_url}/m-einloggen.html") self.web_open(f"{self.root_url}/m-einloggen.html?targetUrl=/")
# accept privacy banner # accept privacy banner
self.web_click(By.ID, "gdpr-banner-accept") self.web_click(By.ID, "gdpr-banner-accept")
@@ -461,6 +462,24 @@ class KleinanzeigenBot(SeleniumMixin):
utils.save_dict(ad_file, ad_cfg_orig) utils.save_dict(ad_file, ad_cfg_orig)
@overrides
def web_open(self, url:str, timeout:float = 15, reload_if_already_open = False) -> None:
start_at = time.time()
super().web_open(url, timeout, reload_if_already_open)
pause(2000)
# reload the page until no fullscreen ad is displayed anymore
while True:
try:
self.web_find(By.XPATH, "/html/body/header[@id='site-header']", 2)
return
except NoSuchElementException as ex:
elapsed = time.time() - start_at
if elapsed < timeout:
super().web_open(url, timeout - elapsed, True)
else:
raise TimeoutException("Loading page failed, it still shows fullscreen ad.") from ex
############################# #############################
# main entry point # main entry point

View File

@@ -225,7 +225,7 @@ class SeleniumMixin:
input_field.send_keys(text) input_field.send_keys(text)
pause() pause()
def web_open(self, url:str, timeout:float = 10, reload_if_already_open = False) -> None: def web_open(self, url:str, timeout:float = 15, reload_if_already_open = False) -> None:
""" """
:param url: url to open in browser :param url: url to open in browser
:param timeout: timespan in seconds within the page needs to be loaded :param timeout: timespan in seconds within the page needs to be loaded

25
pdm.lock generated
View File

@@ -215,6 +215,15 @@ dependencies = [
"attrs>=19.2.0", "attrs>=19.2.0",
] ]
[[package]]
name = "overrides"
version = "6.1.0"
requires_python = ">=3.6"
summary = "A decorator to automatically detect mismatch when overriding a method."
dependencies = [
"typing-utils>=0.0.3",
]
[[package]] [[package]]
name = "packaging" name = "packaging"
version = "21.3" version = "21.3"
@@ -483,6 +492,12 @@ version = "4.1.1"
requires_python = ">=3.6" requires_python = ">=3.6"
summary = "Backported and Experimental Type Hints for Python 3.6+" summary = "Backported and Experimental Type Hints for Python 3.6+"
[[package]]
name = "typing-utils"
version = "0.1.0"
requires_python = ">=3.6.1"
summary = "utils to inspect Python type annotations"
[[package]] [[package]]
name = "urllib3" name = "urllib3"
version = "1.26.8" version = "1.26.8"
@@ -531,7 +546,7 @@ dependencies = [
[metadata] [metadata]
lock_version = "3.1" lock_version = "3.1"
content_hash = "sha256:81a62c2f5f69bee0f964a0ec070894cdde80010a38de4fb6cc2b8a7610033c95" content_hash = "sha256:0950065ae0e85accc6d949ec57598510e1fe569ee0212f9cd225509ab0b091c5"
[metadata.files] [metadata.files]
"altgraph 0.17.2" = [ "altgraph 0.17.2" = [
@@ -772,6 +787,10 @@ content_hash = "sha256:81a62c2f5f69bee0f964a0ec070894cdde80010a38de4fb6cc2b8a761
{file = "outcome-1.1.0-py2.py3-none-any.whl", hash = "sha256:c7dd9375cfd3c12db9801d080a3b63d4b0a261aa996c4c13152380587288d958"}, {file = "outcome-1.1.0-py2.py3-none-any.whl", hash = "sha256:c7dd9375cfd3c12db9801d080a3b63d4b0a261aa996c4c13152380587288d958"},
{file = "outcome-1.1.0.tar.gz", hash = "sha256:e862f01d4e626e63e8f92c38d1f8d5546d3f9cce989263c521b2e7990d186967"}, {file = "outcome-1.1.0.tar.gz", hash = "sha256:e862f01d4e626e63e8f92c38d1f8d5546d3f9cce989263c521b2e7990d186967"},
] ]
"overrides 6.1.0" = [
{file = "overrides-6.1.0-py3-none-any.whl", hash = "sha256:33926e018a952b06309517b3febede982112b86430e588bdd00560b80a4a800b"},
{file = "overrides-6.1.0.tar.gz", hash = "sha256:5ba636b73bf72d3d80550f4a5dfe3c7d04ec6e8fd246c4074bfc7ad82bd0ea3d"},
]
"packaging 21.3" = [ "packaging 21.3" = [
{file = "packaging-21.3-py3-none-any.whl", hash = "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522"}, {file = "packaging-21.3-py3-none-any.whl", hash = "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522"},
{file = "packaging-21.3.tar.gz", hash = "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb"}, {file = "packaging-21.3.tar.gz", hash = "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb"},
@@ -1008,6 +1027,10 @@ content_hash = "sha256:81a62c2f5f69bee0f964a0ec070894cdde80010a38de4fb6cc2b8a761
{file = "typing_extensions-4.1.1-py3-none-any.whl", hash = "sha256:21c85e0fe4b9a155d0799430b0ad741cdce7e359660ccbd8b530613e8df88ce2"}, {file = "typing_extensions-4.1.1-py3-none-any.whl", hash = "sha256:21c85e0fe4b9a155d0799430b0ad741cdce7e359660ccbd8b530613e8df88ce2"},
{file = "typing_extensions-4.1.1.tar.gz", hash = "sha256:1a9462dcc3347a79b1f1c0271fbe79e844580bb598bafa1ed208b94da3cdcd42"}, {file = "typing_extensions-4.1.1.tar.gz", hash = "sha256:1a9462dcc3347a79b1f1c0271fbe79e844580bb598bafa1ed208b94da3cdcd42"},
] ]
"typing-utils 0.1.0" = [
{file = "typing_utils-0.1.0-py3-none-any.whl", hash = "sha256:6bd26f3d38a5dd526ca3a59f0a451ccb59bcee9dc829c872dd6c0aae4ec8bbef"},
{file = "typing_utils-0.1.0.tar.gz", hash = "sha256:8ff6b6705414b82575ad5ae0925ac414a9650fb8c5718289b1327dec61252f65"},
]
"urllib3 1.26.8" = [ "urllib3 1.26.8" = [
{file = "urllib3-1.26.8-py2.py3-none-any.whl", hash = "sha256:000ca7f471a233c2251c6c7023ee85305721bfdf18621ebff4fd17a8653427ed"}, {file = "urllib3-1.26.8-py2.py3-none-any.whl", hash = "sha256:000ca7f471a233c2251c6c7023ee85305721bfdf18621ebff4fd17a8653427ed"},
{file = "urllib3-1.26.8.tar.gz", hash = "sha256:0e7c33d9a63e7ddfcb86780aac87befc2fbddf46c58dbb487e0855f7ceec283c"}, {file = "urllib3-1.26.8.tar.gz", hash = "sha256:0e7c33d9a63e7ddfcb86780aac87befc2fbddf46c58dbb487e0855f7ceec283c"},

View File

@@ -28,6 +28,7 @@ requires-python = ">=3.10,<3.11" # <3.11 to get newer versions of pyinstaller
dependencies = [ dependencies = [
"coloredlogs~=15.0", "coloredlogs~=15.0",
"inflect~=5.4", "inflect~=5.4",
"overrides~=6.1",
"ruamel.yaml~=0.17", "ruamel.yaml~=0.17",
"pywin32==303; sys_platform == 'win32'", "pywin32==303; sys_platform == 'win32'",
"selenium~=4.1", "selenium~=4.1",