update: better exception handling

This commit is contained in:
2025-09-09 18:04:08 +08:00
parent 355cdbd2e6
commit eefde34f8c
2 changed files with 30 additions and 21 deletions

View File

@@ -400,12 +400,23 @@ $$$('#subcategory', 'change', (e) => {
});
$$$('#chunk_size', 'change', (e) => {
let limit = $('#subcategory').disabled ? Limit : Number(subcategory.dataset.limit);
let limit = Number($('#subcategory').dataset.limit) || Limit;
let size = Math.floor(limit / e.target.value);
$('#limit').value = size;
$('#offset').max = size;
$('#offset').value = 0;
$('#offset').dispatchEvent(new Event('change'));
});
$$$('#offset', 'change', (e) => {
let limit = Number($('#subcategory').dataset.limit) || Limit;
let size = Number($('#chunk_size').value) || 0;
if ($('#slice').checked) {
limit = Math.min(size, limit - size * Number(e.target.value));
}
e.target.dataset.limit = limit;
});
function main(url, parameters, locales) {
@@ -523,10 +534,10 @@ function main(url, parameters, locales) {
if (Status === 'RUNNING') {
let index = Number($('#progressLabel').dataset.index) || 0;
let limit = Number($('#subcategory').dataset.limit) || Limit;
let limit = Number($('#offset').dataset.limit) || 0;
let percentage = parseFloat((index / limit * 100).toFixed(2));
$('#progressLabel').innerText = `${index} / ${limit} (${percentage} %)`;
let uptime = Timer.getTimedelta();
$('#uptimeLabel').innerText = uptime.format("HH:mm:ss");

34
main.py
View File

@@ -10,7 +10,7 @@ import re
import trio
import trio_websocket as ws
from selenium.common.exceptions import StaleElementReferenceException, TimeoutException
from selenium.common.exceptions import StaleElementReferenceException, TimeoutException, InvalidSessionIdException
from selenium.webdriver import Chrome, ChromeOptions
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.by import By
@@ -22,7 +22,7 @@ from selenium.webdriver.remote.webdriver import WebDriver
from io import BytesIO
from enum import Enum
from queue import Queue, Empty
from queue import Queue, Empty, ShutDown
from wakepy import keep
from pathlib import Path
from datetime import datetime, timedelta
@@ -30,18 +30,18 @@ from zoneinfo import ZoneInfo
from threading import Thread
from nameparser import HumanName
parser = argparse.ArgumentParser(description="邮件批量发送脚本")
parser = argparse.ArgumentParser(description="Bulk Email Sending")
parser.add_argument('url', nargs='?', default='https://id.ionos.fr/identifier')
parser.add_argument('--column-address', type=str, nargs='?', default='邮箱')
parser.add_argument('--column-name', type=str, nargs='?', default='主要联系人')
parser.add_argument('--column-code', type=str, nargs='?', default='客户编号')
parser.add_argument('--column-pays', type=str, nargs='?', default='国家地区')
parser.add_argument('--column-sent', type=str, nargs='?', default='已发送')
parser.add_argument('-a', '--address', type=str, nargs='?')
parser.add_argument('-p', '--password', type=str, nargs='?')
parser.add_argument('-t', '--timeout', type=int, nargs='?', default=60)
parser.add_argument('-i', '--interval', type=int, nargs='?', default=10)
parser.add_argument('-r', '--attempts', type=int, nargs='?', default=3)
parser.add_argument('--column-address', type=str, default='邮箱')
parser.add_argument('--column-name', type=str, default='主要联系人')
parser.add_argument('--column-code', type=str, default='客户编号')
parser.add_argument('--column-pays', type=str, default='国家地区')
parser.add_argument('--column-sent', type=str, default='已发送')
parser.add_argument('-a', '--address', type=str)
parser.add_argument('-p', '--password', type=str)
parser.add_argument('-t', '--timeout', type=int, default=60)
parser.add_argument('-i', '--interval', type=int, default=10)
parser.add_argument('-r', '--attempts', type=int, default=3)
args = parser.parse_args()
inbox, outbox = Queue(), Queue()
@@ -333,6 +333,7 @@ def main(driver: WebDriver):
cursor = 0
status = Status.ACTIVE
occurrences = {}
request = None
sent = 0
errors = 0
warnings = 0
@@ -475,8 +476,8 @@ def main(driver: WebDriver):
break
except Faillable as o:
request = o.request
except KeyboardInterrupt:
tell('程序中断', level=1)
except (KeyboardInterrupt, ShutDown, InvalidSessionIdException) as e:
tell('程序中断', e, level=1)
status = Status.TERMINATED
break
except Exception as e:
@@ -572,9 +573,6 @@ if __name__ == '__main__':
opts.add_experimental_option("excludeSwitches", ["enable-logging"])
driver = Chrome(opts)
status = main(driver)
except KeyboardInterrupt:
tell('程序中断', level=1)
status = 145
except Exception as e:
tell('致命错误', e, level=0)
status = 1