fix: вторая модалка подтверждения hh.ru — повторный клик «Отправить отклик» после «Отправить»
This commit is contained in:
1 parent
31fd316d51
commit
b7619f28fe
1 file changed
+39
@@ -37,6 +37,15 @@ SUBMIT_BUTTONS = [
|
|||||||
'[data-qa="vacancy-response-popup-form"] button[type="submit"]',
|
'[data-qa="vacancy-response-popup-form"] button[type="submit"]',
|
||||||
'button:has-text("Отправить")',
|
'button:has-text("Отправить")',
|
||||||
]
|
]
|
||||||
|
# Кнопки подтверждения во ВТОРОЙ модалке hh.ru: после клика «Отправить»
|
||||||
|
# иногда появляется модалка «Отклик будет отправлен» с кнопкой
|
||||||
|
# «Отправить отклик» — её нужно нажать ещё раз.
|
||||||
|
CONFIRM_BUTTONS = [
|
||||||
|
'button:has-text("Отправить отклик")',
|
||||||
|
'button:has-text("Подтвердить")',
|
||||||
|
'button:has-text("Да, отправить")',
|
||||||
|
'[data-qa="vacancy-response-confirm"]',
|
||||||
|
]
|
||||||
|
|
||||||
# Живые браузерные контексты и страницы: {(user, account): ...}
|
# Живые браузерные контексты и страницы: {(user, account): ...}
|
||||||
# Доступны ТОЛЬКО из браузерного потока.
|
# Доступны ТОЛЬКО из браузерного потока.
|
||||||
@@ -199,6 +208,26 @@ def _save_screenshot(page, screenshot_dir, vid):
|
|||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
def _click_second_confirm(page):
|
||||||
|
"""После клика «Отправить» hh.ru иногда показывает вторую модалку
|
||||||
|
подтверждения («Отклик будет отправлен») — жмём и её.
|
||||||
|
Возвращает True, если вторая кнопка найдена и нажата."""
|
||||||
|
try:
|
||||||
|
page.wait_for_timeout(1500)
|
||||||
|
except Exception:
|
||||||
|
return False
|
||||||
|
for sel in CONFIRM_BUTTONS:
|
||||||
|
try:
|
||||||
|
btn = page.locator(sel).first
|
||||||
|
if btn.is_visible(timeout=1500):
|
||||||
|
btn.click()
|
||||||
|
print(" ✓ Вторая модалка подтверждения — кнопка нажата")
|
||||||
|
return True
|
||||||
|
except Exception:
|
||||||
|
continue
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
def open_response_page(account_dir, user, account, vacancy, message,
|
def open_response_page(account_dir, user, account, vacancy, message,
|
||||||
resume_id=None, screenshot_dir=None, submit=False):
|
resume_id=None, screenshot_dir=None, submit=False):
|
||||||
"""Открывает вакансию, жмёт «Откликнуться», выбирает резюме, вставляет текст.
|
"""Открывает вакансию, жмёт «Откликнуться», выбирает резюме, вставляет текст.
|
||||||
@@ -277,6 +306,11 @@ def open_response_page(account_dir, user, account, vacancy, message,
|
|||||||
if not submitted:
|
if not submitted:
|
||||||
shot = _save_screenshot(page, screenshot_dir, vacancy["id"])
|
shot = _save_screenshot(page, screenshot_dir, vacancy["id"])
|
||||||
return False, "Не нашёл кнопку «Отправить» — проверьте скриншот", shot
|
return False, "Не нашёл кнопку «Отправить» — проверьте скриншот", shot
|
||||||
|
# hh.ru иногда показывает вторую модалку подтверждения — жмём и её
|
||||||
|
try:
|
||||||
|
_click_second_confirm(page)
|
||||||
|
except Exception:
|
||||||
|
pass
|
||||||
# Ждём подтверждение и снимаем скриншот результата.
|
# Ждём подтверждение и снимаем скриншот результата.
|
||||||
# После отправки hh.ru может закрыть модалку/перезагрузить страницу —
|
# После отправки hh.ru может закрыть модалку/перезагрузить страницу —
|
||||||
# ловим любые ошибки, но браузер закрываем ВСЕГДА (finally).
|
# ловим любые ошибки, но браузер закрываем ВСЕГДА (finally).
|
||||||
@@ -304,6 +338,11 @@ def confirm_send(user, account, vid):
|
|||||||
btn = page.locator(sel).first
|
btn = page.locator(sel).first
|
||||||
if btn.is_visible(timeout=3000):
|
if btn.is_visible(timeout=3000):
|
||||||
btn.click()
|
btn.click()
|
||||||
|
try:
|
||||||
|
# Вторая модалка подтверждения (если появилась)
|
||||||
|
_click_second_confirm(page)
|
||||||
|
except Exception:
|
||||||
|
pass
|
||||||
try:
|
try:
|
||||||
page.wait_for_timeout(1500)
|
page.wait_for_timeout(1500)
|
||||||
except Exception:
|
except Exception:
|
||||||
|
|||||||
Reference in new issue
Block a user