@sery2013 50 $
Ограничить скорость для браузера
-
В общем задача следующая, мне нужно ограничить скорость сетевого соединения для браузера в басе, по типу как в девтулс. Я пробовал пакеты https://www.npmjs.com/search?q=throttle и через проксирование, ну не умею я пока js готовить. Нужно ограничивать скорость например от 64 до 256 кб/с.

-
Скрипт писать не буду, но опытом поделюсь.
BAS из коробки не имеет ничего, что помогло бы тебе сделать задачу просто и быстро.
Мне только известен путь как сделать это сбоку:
- найти remote_debugging_port для запущенного браузера
- законнектиться к нему по CDP
- послать команду Network.emulateNetworkConditions.
-
@sergerdn said in Ограничить скорость для браузера:
найти remote_debugging_port для запущенного браузера
бас не воспринимает атрибут --remote-debugging-port если я правильно понял, пробовал ранее. С этим атрибутом --remote-debugging-port=9222 тупо браузер не запускается
-
@FastSpace said in Ограничить скорость для браузера:
Ставишь 3proxy
Жуткий костыль, думал про него, но пока отложу для поиска менее костыльного способа, в любом случае спасибо.
-
@Light said in Ограничить скорость для браузера:
@sergerdn said in Ограничить скорость для браузера:
найти remote_debugging_port для запущенного браузера
бас не воспринимает атрибут --remote-debugging-port если я правильно понял, пробовал ранее. С этим атрибутом --remote-debugging-port=9222 тупо браузер не запускается
Я написал для запущенного браузера, а не запустить браузер с нужными параметрами. Я размещал на этом форуме подробную логику с примерами кода на python.
-
@sergerdn said in Ограничить скорость для браузера:
Я написал для запущенного браузера, а не запустить браузер с нужными параметрами. Я размещал на этом форуме подробную логику с примерами кода на python.
Я видел только одну вашу похожую тему https://community.bablosoft.com/topic/24585/ Можете если не затруднит тыкнуть на пример с пайтоном?
-
@Light said in Ограничить скорость для браузера:
Можете если не затруднит тыкнуть на пример с пайтоном?
Можно переписать код на NodeJS, сделать из него кубик и таскать везде по проектам. Хотя я бы предпочел переписать код на PowerShell и запускать его из BAS, чтобы не использовать NodeJS.
Но вот незадача - кубика для запуска кода на PowerShell в BAS то нет.
-
Думаю вариант @FastSpace с 3proxy максимально простой, можно даже на том же бас сделать шаблон, который будет брать список прокси и создавать конфиги/запускать локальный прокси и выдавать список этих локальных прокси
-
Хз накидал код с чатжпт, ни хера не проксируется:
await (new Promise(async (resolve, reject) => { try { const fs = require('fs'); const { exec } = require('child_process'); const net = require('net'); function getRandomPort() { return Math.floor(Math.random() * (65535 - 1024 + 1)) + 1024; } function checkPortAvailability(port) { return new Promise((resolve, reject) => { const server = net.createServer(); server.once('error', (err) => { if (err.code === 'EADDRINUSE') { resolve(false); } else { reject(err); } }); server.once('listening', () => { server.close(() => { resolve(true); }); }); server.listen(port); }); } await new Promise((resolve, reject) => { const configPath = `D:\\BAS\\${Math.random().toString(36).substring(7)}.cfg`; const proxyPort = getRandomPort(); const configContents = ` daemon maxconn 1000 nserver 8.8.8.8 nscache 65536 users ${configPath} rotate 3 flush allow * ${proxyPort} timeout 6000 dnspr noup nopm nolog proxy -p${proxyPort} -i127.0.0.1 -e${configPath} timeouts 1 5 30 60 180 1800 15 60 speeds https://capmonster.cloud/Dashboard 32 64 `; fs.writeFile(configPath, configContents, (err) => { if (err) { reject(err); } else { resolve(); } }); }); let isPortAvailable = false; let proxyPort; do { proxyPort = getRandomPort(); isPortAvailable = await checkPortAvailability(proxyPort); } while (!isPortAvailable); const logMessage = `Proxy settings: Host: 127.0.0.1, Port: ${proxyPort}`; console.log(logMessage); const configFileName = fs.readdirSync('D:\\BAS\\').find((file) => file.endsWith('.cfg')); console.log(`Config File: ${configFileName}`); const proxyPath = 'D:\\BAS\\3proxy\\3proxy.exe'; exec(`"${proxyPath}" "${configFileName}"`, (err, stdout, stderr) => { if (err) { console.error(err); } console.log(stdout); console.error(stderr); }); resolve(); } catch (error) { reject(error); } }));
А еще же нужно же включить и другие прокси для работы, это как так, прокси через прокси?)
-
@Light said in Ограничить скорость для браузера:
Хз накидал код с чатжпт, ни хера не проксируется:
ChatGpt особым умом не отличается и написал он вам какую-то ерунду, касаемо самого конфига. ChatGpt часто просто что-то придумывает, если не знает точно как это сделать.
Это что...
users ${configPath}А потом еще это
-e${configPath}Это то что сходу бросилось в глаза
Лучше почитайте доку 3proxy и сами сделайти шаблон конфига, тут даже nodejs не обязательно использовать можно просто в БАС все это реализовать.
-
-
Мне подсказали скрипт на пост запросах
const delay = (ms) => new Promise(resolve => setTimeout(resolve, ms)); const chunksToSend = ['1', '2', '3']; const stream = new ReadableStream({ async start(controller) { for(const chunk of chunksToSend) { await delay(1000); controller.enqueue(chunk); } controller.close(); } }); fetch('https://postman-echo.com/post', { method: 'POST', body: stream.pipeThrough(new TextEncoderStream()), headers: {'Content-Type': 'text/plain'}, duplex: 'half', }) .then(response => response.text()) .then(text => console.log('Response:', text));Но он мне не подходит, так нужны гет запросы.
Задача актуальна, кто знает как решить вопрос велком в тг
-
@Light said in Ограничить скорость для браузера:
Мне подсказали скрипт на пост запросах
Но он мне не подходит, так нужны гет запросы.Задача актуальна, кто знает как решить вопрос велком в тг
const delay = (ms) => new Promise(resolve => setTimeout(resolve, ms)); const chunksToSend = ['1', '2', '3']; const stream = new ReadableStream({ async start(controller) { for(const chunk of chunksToSend) { await delay(1000); controller.enqueue(chunk); } controller.close(); } }); fetch('https://postman-echo.com/post') .then(response => response.text()) .then(text => console.log('Response:', text)); -
@Fox Ошибка при выполнении:
Uncaught (in promise) RangeError: Maximum call stack size exceededЧат жпт не знает как её исправить, предлагает решение:
В коде, который вы предоставили, ошибка "Uncaught (in promise) RangeError: Maximum call stack size exceeded" возникает из-за рекурсивного вызова функции delay внутри цикла for...of. Это приводит к переполнению стека вызовов и возникновению ошибки. Для исправления этой ошибки вам необходимо изменить код таким образом, чтобы функция delay не вызывалась рекурсивно внутри цикла. Вместо этого вы можете использовать функцию setTimeout для задержки перед добавлением элемента в поток.Но по факту без изминений, таже ошибка.
const delay = (ms) => new Promise(resolve => setTimeout(resolve, ms)); const chunksToSend = ['1', '2', '3']; const stream = new ReadableStream({ start(controller) { let index = 0; const addChunk = () => { if (index < chunksToSend.length) { controller.enqueue(chunksToSend[index]); index++; setTimeout(addChunk, 100); } else { controller.close(); } }; addChunk(); } }); fetch('https://site.com/') .then(response => response.text()) .then(text => console.log('Response:', text));