refact: simplify XPATH expressions

This commit is contained in:
sebthom
2025-05-12 18:28:28 +02:00
parent 50c0323921
commit 58f6ae960f

View File

@@ -795,12 +795,12 @@ class KleinanzeigenBot(WebScrapingMixin):
await self.web_click(By.ID, "pstad-submit") await self.web_click(By.ID, "pstad-submit")
except TimeoutError: except TimeoutError:
# https://github.com/Second-Hand-Friends/kleinanzeigen-bot/issues/40 # https://github.com/Second-Hand-Friends/kleinanzeigen-bot/issues/40
await self.web_click(By.XPATH, "//fieldset[@id='postad-publish']//*[contains(text(),'Anzeige aufgeben')]") await self.web_click(By.XPATH, "//fieldset[@id='postad-publish']//*[contains(., 'Anzeige aufgeben')]")
await self.web_click(By.ID, "imprint-guidance-submit") await self.web_click(By.ID, "imprint-guidance-submit")
# check for no image question # check for no image question
try: try:
image_hint_xpath = '//*[contains(@class, "ModalDialog--Actions")]//button[.//*[text()[contains(.,"Ohne Bild veröffentlichen")]]]' image_hint_xpath = '//*[contains(@class, "ModalDialog--Actions")]//button[contains(., "Ohne Bild veröffentlichen")]'
if not ad_cfg["images"] and await self.web_check(By.XPATH, image_hint_xpath, Is.DISPLAYED): if not ad_cfg["images"] and await self.web_check(By.XPATH, image_hint_xpath, Is.DISPLAYED):
await self.web_click(By.XPATH, image_hint_xpath) await self.web_click(By.XPATH, image_hint_xpath)
except TimeoutError: except TimeoutError:
@@ -815,7 +815,7 @@ class KleinanzeigenBot(WebScrapingMixin):
# check for approval message # check for approval message
try: try:
approval_link_xpath = '//*[contains(@id, "not-completed")]//*//a[contains(@class, "to-my-ads-link")]' approval_link_xpath = '//*[contains(@id, "not-completed")]//a[contains(@class, "to-my-ads-link")]'
if await self.web_check(By.XPATH, approval_link_xpath, Is.DISPLAYED): if await self.web_check(By.XPATH, approval_link_xpath, Is.DISPLAYED):
await self.web_click(By.XPATH, approval_link_xpath) await self.web_click(By.XPATH, approval_link_xpath)
except TimeoutError: except TimeoutError:
@@ -858,7 +858,7 @@ class KleinanzeigenBot(WebScrapingMixin):
try: try:
# Click continue button # Click continue button
await self.web_click(By.XPATH, '//*[contains(@class, "ModalDialog--Actions")]//button[.//*[text()[contains(.,"Bestätigen")]]]') await self.web_click(By.XPATH, '//*[contains(@class, "ModalDialog--Actions")]//button[contains(., "Bestätigen")]')
except TimeoutError as ex: except TimeoutError as ex:
raise TimeoutError(_("Unable to close condition dialog!")) from ex raise TimeoutError(_("Unable to close condition dialog!")) from ex
@@ -929,13 +929,12 @@ class KleinanzeigenBot(WebScrapingMixin):
if ad_cfg["shipping_type"] == "PICKUP": if ad_cfg["shipping_type"] == "PICKUP":
try: try:
await self.web_click(By.XPATH, await self.web_click(By.XPATH,
'//*[contains(@class, "ShippingPickupSelector")]//label[text()[contains(.,"Nur Abholung")]]/../input[@type="radio"]') '//*[contains(@class, "ShippingPickupSelector")]//label[contains(., "Nur Abholung")]/../input[@type="radio"]')
except TimeoutError as ex: except TimeoutError as ex:
LOG.debug(ex, exc_info = True) LOG.debug(ex, exc_info = True)
elif ad_cfg["shipping_options"]: elif ad_cfg["shipping_options"]:
await self.web_click(By.XPATH, '//*[contains(@class, "SubSection")]//*//button[contains(@class, "SelectionButton")]') await self.web_click(By.XPATH, '//*[contains(@class, "SubSection")]//button[contains(@class, "SelectionButton")]')
await self.web_click(By.XPATH, await self.web_click(By.XPATH, '//*[contains(@class, "CarrierSelectionModal")]//button[contains(., "Andere Versandmethoden")]')
'//*[contains(@class, "CarrierSelectionModal")]//button[contains(text(),"Andere Versandmethoden")]')
await self.__set_shipping_options(ad_cfg) await self.__set_shipping_options(ad_cfg)
else: else:
special_shipping_selector = '//select[contains(@id, ".versand_s")]' special_shipping_selector = '//select[contains(@id, ".versand_s")]'
@@ -947,15 +946,14 @@ class KleinanzeigenBot(WebScrapingMixin):
try: try:
# no options. only costs. Set custom shipping cost # no options. only costs. Set custom shipping cost
if ad_cfg["shipping_costs"] is not None: if ad_cfg["shipping_costs"] is not None:
await self.web_click(By.XPATH, await self.web_click(By.XPATH, '//*[contains(@class, "SubSection")]//button[contains(@class, "SelectionButton")]')
'//*[contains(@class, "SubSection")]//*//button[contains(@class, "SelectionButton")]') await self.web_click(By.XPATH, '//*[contains(@class, "CarrierSelectionModal")]//button[contains(., "Andere Versandmethoden")]')
await self.web_click(By.XPATH, '//*[contains(@class, "CarrierSelectionModal")]//button[contains(text(),"Andere Versandmethoden")]')
await self.web_click(By.XPATH, '//*[contains(@id, "INDIVIDUAL") and contains(@data-testid, "Individueller Versand")]') await self.web_click(By.XPATH, '//*[contains(@id, "INDIVIDUAL") and contains(@data-testid, "Individueller Versand")]')
if ad_cfg["shipping_costs"]: if ad_cfg["shipping_costs"]:
await self.web_input(By.CSS_SELECTOR, '.IndividualShippingInput input[type="text"]', await self.web_input(By.CSS_SELECTOR, '.IndividualShippingInput input[type="text"]',
str.replace(ad_cfg["shipping_costs"], ".", ",")) str.replace(ad_cfg["shipping_costs"], ".", ","))
await self.web_click(By.XPATH, '//dialog//button[.//*[text()[contains(.,"Fertig")]]]') await self.web_click(By.XPATH, '//dialog//button[contains(., "Fertig")]')
except TimeoutError as ex: except TimeoutError as ex:
LOG.debug(ex, exc_info = True) LOG.debug(ex, exc_info = True)
raise TimeoutError(_("Unable to close shipping dialog!")) from ex raise TimeoutError(_("Unable to close shipping dialog!")) from ex
@@ -1001,10 +999,7 @@ class KleinanzeigenBot(WebScrapingMixin):
await self.web_click(By.CSS_SELECTOR, f'.SingleSelectionItem--Main input[type=radio][data-testid="{shipping_size}"]') await self.web_click(By.CSS_SELECTOR, f'.SingleSelectionItem--Main input[type=radio][data-testid="{shipping_size}"]')
to_be_clicked_shipping_packages = list(shipping_packages) to_be_clicked_shipping_packages = list(shipping_packages)
await self.web_click( await self.web_click(By.XPATH, '//*[contains(@class, "ModalDialog--Actions")]//button[contains(., "Weiter")]')
By.XPATH,
'//*[contains(@class, "ModalDialog--Actions")]'
'//button[.//*[text()[contains(.,"Weiter")]]]')
for shipping_package in to_be_clicked_shipping_packages: for shipping_package in to_be_clicked_shipping_packages:
try: try:
@@ -1021,7 +1016,7 @@ class KleinanzeigenBot(WebScrapingMixin):
LOG.debug(ex, exc_info = True) LOG.debug(ex, exc_info = True)
try: try:
# Click apply button # Click apply button
await self.web_click(By.XPATH, '//*[contains(@class, "ModalDialog--Actions")]//button[.//*[text()[contains(.,"Fertig")]]]') await self.web_click(By.XPATH, '//*[contains(@class, "ModalDialog--Actions")]//button[contains(., "Fertig")]')
except TimeoutError as ex: except TimeoutError as ex:
raise TimeoutError(_("Unable to close shipping dialog!")) from ex raise TimeoutError(_("Unable to close shipping dialog!")) from ex