fix: браузер закрывается на ВСЕХ путях (try/finally в open_response_page, кроме ручного режима; confirm_send закрывает при ошибке); статус меняется при ok=true даже без скриншота
This commit is contained in:
1 parent
8ca070ed70
commit
06c142b1ea
2 files changed
+27
-8
No files matched your search
+14
-4
@@ -237,7 +237,9 @@ def open_response_page(account_dir, user, account, vacancy, message,
|
||||
resume_id=None, screenshot_dir=None, submit=False):
|
||||
"""Открывает вакансию, жмёт «Откликнуться», выбирает резюме, вставляет текст.
|
||||
При submit=True дополнительно жмёт «Отправить» и снимает скриншот результата.
|
||||
Возвращает (ok, note, screenshot_path)."""
|
||||
Возвращает (ok, note, screenshot_path).
|
||||
Браузер закрывается ВСЕГДА, кроме ручного режима (submit=False, успех) —
|
||||
там он нужен для confirm_send."""
|
||||
key = (user, account)
|
||||
# Закрываем предыдущую страницу этого аккаунта
|
||||
prev = _pages.pop(key, None)
|
||||
@@ -249,6 +251,8 @@ def open_response_page(account_dir, user, account, vacancy, message,
|
||||
|
||||
page = _new_page(account_dir, user, account)
|
||||
_pages[key] = page
|
||||
keep_open = False
|
||||
try:
|
||||
page.goto(vacancy["url"], timeout=45000)
|
||||
page.wait_for_timeout(2500)
|
||||
|
||||
@@ -329,18 +333,22 @@ def open_response_page(account_dir, user, account, vacancy, message,
|
||||
pass
|
||||
# Ждём подтверждение и снимаем скриншот результата.
|
||||
# После отправки hh.ru может закрыть модалку/перезагрузить страницу —
|
||||
# ловим любые ошибки, но браузер закрываем ВСЕГДА (finally).
|
||||
# ловим любые ошибки, но отклик уже отправлен.
|
||||
try:
|
||||
page.wait_for_timeout(2500)
|
||||
shot = _save_screenshot(page, screenshot_dir, vacancy["id"])
|
||||
except Exception:
|
||||
shot = None
|
||||
finally:
|
||||
_close_context(key)
|
||||
return True, "Отклик отправлен", shot
|
||||
|
||||
# Ручной режим: браузер оставляем открытым для confirm_send
|
||||
keep_open = True
|
||||
shot = _save_screenshot(page, screenshot_dir, vacancy["id"])
|
||||
return True, "Текст вставлен. Проверьте скриншот и нажмите «Отправить»", shot
|
||||
finally:
|
||||
# Браузер закрываем ВСЕГДА, кроме ручного режима (нужен для confirm_send)
|
||||
if not keep_open:
|
||||
_close_context(key)
|
||||
|
||||
|
||||
def confirm_send(user, account, vid):
|
||||
@@ -369,6 +377,8 @@ def confirm_send(user, account, vid):
|
||||
return True, "Кнопка «Отправить» нажата. Проверьте статус отклика на hh.ru."
|
||||
except Exception:
|
||||
continue
|
||||
# Кнопка не найдена — браузер больше не нужен, закрываем
|
||||
_close_context(key)
|
||||
return False, "Не нашёл кнопку «Отправить» — возможно, форма уже закрыта"
|
||||
|
||||
|
||||
|
||||
+13
-4
@@ -679,14 +679,19 @@ async function sendFromModal() {
|
||||
const data = await api(`/api/accounts/${currentAccount}/send-now`, {
|
||||
method: 'POST', body: JSON.stringify({ id: sendModalId, message }),
|
||||
});
|
||||
if (data.ok && data.screenshot) {
|
||||
showShotModal(sendModalId, data.screenshot, data.note || 'Отклик отправлен', true);
|
||||
if (data.ok) {
|
||||
// Отклик отправлен — статус меняем всегда, даже если скриншота нет
|
||||
sentTexts.add(sendModalId);
|
||||
const v = vacancies.find(x => x.id === sendModalId);
|
||||
if (v) v.responded = true;
|
||||
renderVacancies();
|
||||
renderTexts();
|
||||
closeSendModal();
|
||||
if (data.screenshot) {
|
||||
showShotModal(sendModalId, data.screenshot, data.note || 'Отклик отправлен', true);
|
||||
} else {
|
||||
alert(data.note || 'Отклик отправлен');
|
||||
}
|
||||
} else if (data.screenshot) {
|
||||
// Бэкенд вернул скриншот, но отклик НЕ отправлен (например, не нашёл поле)
|
||||
showShotModal(sendModalId, data.screenshot, data.note || 'Не удалось отправить отклик', false);
|
||||
@@ -743,13 +748,17 @@ async function sendVacancy(id) {
|
||||
method: 'POST', body: JSON.stringify({ id, message }),
|
||||
});
|
||||
if (note) note.textContent = data.note || '';
|
||||
if (data.ok && data.screenshot) {
|
||||
showShotModal(id, data.screenshot, data.note || 'Отклик отправлен', true);
|
||||
if (data.ok) {
|
||||
sentTexts.add(id);
|
||||
const v = vacancies.find(x => x.id === id);
|
||||
if (v) v.responded = true;
|
||||
renderVacancies();
|
||||
renderTexts();
|
||||
if (data.screenshot) {
|
||||
showShotModal(id, data.screenshot, data.note || 'Отклик отправлен', true);
|
||||
} else {
|
||||
alert(data.note || 'Отклик отправлен');
|
||||
}
|
||||
} else if (data.screenshot) {
|
||||
showShotModal(id, data.screenshot, data.note || 'Не удалось отправить отклик', false);
|
||||
} else {
|
||||
|
||||
Reference in new issue
Block a user