import logging from actions import open_page from classes.application_result import ApplicationResult from language import _ from providers._provider import ApplyContext, Provider logger = logging.getLogger("flat-apply") class Howoge(Provider): @property def domain(self) -> str: return "howoge.de" async def apply_for_flat(self, url: str, ctx: ApplyContext) -> ApplicationResult: r = ctx.recorder p = ctx.profile async with open_page(url, recorder=r) as page: await r.step_snap(page, "cookies.check") cookie_accept_btn = page.get_by_role("button", name="Alles akzeptieren") if await cookie_accept_btn.is_visible(): await cookie_accept_btn.click() await r.step_snap(page, "cookies.accepted") else: r.step("cookies.absent") r.step("page.404_check", detail=page.url) if page.url == "https://www.howoge.de/404": await r.step_snap(page, "abort.not_found", status="warn") return ApplicationResult(False, message=_("not_found")) await r.step_snap(page, "form.open") await page.get_by_role("link", name="Besichtigung anfragen").click() await r.step_snap(page, "form.wbs_hint") await page.get_by_text("Ja, ich habe die Hinweise zum WBS zur Kenntnis genommen.").click() await page.get_by_role("button", name="Weiter").click() await r.step_snap(page, "form.income_hint") await page.get_by_text("Ja, ich habe den Hinweis zum Haushaltsnettoeinkommen zur Kenntnis genommen.").click() await page.get_by_role("button", name="Weiter").click() await r.step_snap(page, "form.bonitaet_hint") await page.get_by_text("Ja, ich habe den Hinweis zur Bonitätsauskunft zur Kenntnis genommen.").click() await page.get_by_role("button", name="Weiter").click() await r.step_snap(page, "form.fill") await page.locator("#immo-form-firstname").fill(p.firstname) await page.locator("#immo-form-lastname").fill(p.lastname) await page.locator("#immo-form-email").fill(p.email) if not ctx.submit_forms: await r.step_snap(page, "submit.dry_run") return ApplicationResult(True, _("application_success_dry")) await r.step_snap(page, "submit.click") await page.get_by_role("button", name="Anfrage senden").click() await r.step_snap(page, "success.check") if await page.get_by_role("heading", name="Vielen Dank.").is_visible(): return ApplicationResult(True) await r.step_snap(page, "success.not_found", status="warn") return ApplicationResult(False, _("submit_conformation_msg_not_found"))