Вкладка открывается с нужным адресом, а не пустая

DevTools берёт всё, что стоит после '?' в /json/new, как сам адрес целиком —
это не параметры запроса. Строка 'url=https%3A%2F%2Fchat.deepseek.com%2F'
честно считалась адресом, и открывалась about:blank. Место срабатывает
только когда браузер жив, а вкладки с чатом нет, поэтому лежало незамеченным.

Заодно ensureBrowser теперь проверяет, что открылось именно то: беззвучный
промах в этом файле уже был один раз, с кнопкой New chat.
This commit is contained in:
Alex Cube
2026-08-26 17:06:47 +03:00
parent d8f655c945
commit bd32845458
+16 -5
View File
@@ -1064,15 +1064,26 @@ export async function ensureBrowser(log = () => {}) {
log('браузер поднялся'); log('браузер поднялся');
} }
const list = await (await fetch(`http://127.0.0.1:${PORT}/json/list`)).json().catch(() => []); const tabs = () => fetch(`http://127.0.0.1:${PORT}/json/list`)
if (list.some(t => String(t.url || '').includes('deepseek'))) return; .then(r => r.json()).catch(() => []);
const isChat = t => String(t.url || '').includes('deepseek');
if ((await tabs()).some(isChat)) return;
// Новая вкладка в свежих сборках Chromium открывается ТОЛЬКО методом PUT: // Новая вкладка в свежих сборках Chromium открывается ТОЛЬКО методом PUT:
// на GET протокол отвечает 405 и молча ничего не делает. // на GET протокол отвечает 405 и молча ничего не делает.
const r = await fetch( //
`http://127.0.0.1:${PORT}/json/new?url=${encodeURIComponent(BROWSER.url)}`, // И адрес НЕ параметр запроса: всё, что стоит после '?', протокол берёт
{ method: 'PUT' }); // как сам адрес целиком. С '?url=...' открывалась пустая about:blank —
// строку 'url=https%3A%2F%2F...' он честно считал адресом.
const r = await fetch(`http://127.0.0.1:${PORT}/json/new?${BROWSER.url}`,
{ method: 'PUT' });
if (!r.ok) throw new Error(`Не удалось открыть вкладку DeepSeek: ${r.status}.`); if (!r.ok) throw new Error(`Не удалось открыть вкладку DeepSeek: ${r.status}.`);
await sleep(4000); // дать чату прогрузиться до первого вопроса await sleep(4000); // дать чату прогрузиться до первого вопроса
// Открыл — убедись, что открылось именно то: молчаливый промах здесь уже был.
if (!(await tabs()).some(isChat)) {
throw new Error(`Вкладка открылась, но не с ${BROWSER.url}. `
+ 'Похоже, браузер не принял адрес — закройте лишние вкладки и повторите.');
}
log('вкладка с чатом открыта'); log('вкладка с чатом открыта');
} }