From c9d5c03ad21e6b4482b498e63da19a103f14c86b Mon Sep 17 00:00:00 2001 From: Heavenfighter <33938595+Heavenfighter@users.noreply.github.com> Date: Tue, 9 Sep 2025 11:24:46 +0200 Subject: [PATCH] feat: Allow individual shipping without setting shipping costs (#626) --- src/kleinanzeigen_bot/__init__.py | 37 +++++++++++++++---------------- 1 file changed, 18 insertions(+), 19 deletions(-) diff --git a/src/kleinanzeigen_bot/__init__.py b/src/kleinanzeigen_bot/__init__.py index 184a4bc..15be46b 100644 --- a/src/kleinanzeigen_bot/__init__.py +++ b/src/kleinanzeigen_bot/__init__.py @@ -1112,29 +1112,28 @@ class KleinanzeigenBot(WebScrapingMixin): else: try: # no options. only costs. Set custom shipping cost - if ad_cfg.shipping_costs is not None: + await self.web_click(By.XPATH, + '//button//span[contains(., "Versandmethoden auswählen")]') + try: + # when "Andere Versandmethoden" is not available, then we are already on the individual page await self.web_click(By.XPATH, - '//button//span[contains(., "Versandmethoden auswählen")]') + '//dialog//button[contains(., "Andere Versandmethoden")]') + except TimeoutError: + pass - try: - # when "Andere Versandmethoden" is not available, then we are already on the individual page - await self.web_click(By.XPATH, - '//dialog//button[contains(., "Andere Versandmethoden")]') - except TimeoutError: - pass - - try: - # only click on "Individueller Versand" when "IndividualShippingInput" is not available, otherwise its already checked - # (important for mode = UPDATE) - await self.web_find(By.XPATH, - '//input[contains(@placeholder, "Versandkosten (optional)")]', - timeout = 2) - except TimeoutError: - await self.web_click(By.XPATH, '//*[contains(@id, "INDIVIDUAL") and contains(@data-testid, "Individueller Versand")]') + try: + # only click on "Individueller Versand" when "IndividualShippingInput" is not available, otherwise its already checked + # (important for mode = UPDATE) + await self.web_find(By.XPATH, + '//input[contains(@placeholder, "Versandkosten (optional)")]', + timeout = 2) + except TimeoutError: + await self.web_click(By.XPATH, '//*[contains(@id, "INDIVIDUAL") and contains(@data-testid, "Individueller Versand")]') + if ad_cfg.shipping_costs is not None: await self.web_input(By.XPATH, '//input[contains(@placeholder, "Versandkosten (optional)")]', - str.replace(str(ad_cfg.shipping_costs), ".", ",")) - await self.web_click(By.XPATH, '//dialog//button[contains(., "Fertig")]') + str.replace(str(ad_cfg.shipping_costs), ".", ",")) + await self.web_click(By.XPATH, '//dialog//button[contains(., "Fertig")]') except TimeoutError as ex: LOG.debug(ex, exc_info = True) raise TimeoutError(_("Unable to close shipping dialog!")) from ex