Null
где фришгные чекнуть можно ?
upstreamProxyUrl: `http://103.6.223.2:3128`,
Null
где фришгные чекнуть можно ?
https://geonode.com/free-proxy-list
👨‍💻
Значит прокси такой. Я только что взял дефолтный скрипт проксичейна, вставил туда фришный прокси. Сначала сделал запрос через курл, он отработал нормально, потом так же запустил хром с прокси.
ну у меня они работали, когда я юзал либу import ProxyRouter from '@extra/proxy-router'; puppeteer.use(ProxyRouter({ proxies: { DEFAULT: fullProxy } })); то есть с этой либой все работает, а proxychain нет?)
Null
ну у меня они работали, когда я юзал либу import ProxyRouter from '@extra/proxy-router'; puppeteer.use(ProxyRouter({ proxies: { DEFAULT: fullProxy } })); то есть с этой либой все работает, а proxychain нет?)
У некоторых прокси могут быть лимиты какие-то, на определённые сайты могут не заходить. В условиях ничего про это нет?
👨‍💻
так, я кое-что заметил
👨‍💻
await page.setRequestInterception(true); полностью ломает proxychain и все остальное, то есть если ее убрать, то браузер грузит
Null
Покажи как перехватчик у тебя реализован в коде.
👨‍💻
А ты continue() вызываешь где-то?
сейчас будет либо жесткий фиаско, либо да
Null
await page.setRequestInterception(true); полностью ломает proxychain и все остальное, то есть если ее убрать, то браузер грузит
Т.е. у тебя изначально не в прокси проблема была а в том что ты сам блокировал запросы и не давал им разрешение продолжать работу? Бывает. 😄
Null
Да и изначально ты какое-то странное решение пробовал а не проксичейн.
👨‍💻
Ну сейчас-то без неё работает?
я проверяю в локально браузере, тут работает
👨‍💻
...
👨‍💻
ладно. все мы допускаем ошибки
👨‍💻
пусть это останется на моей совести
Null
Из-за интерсептора проблемы были?
👨‍💻
Из-за интерсептора проблемы были?
именно, но это в случае с proxychain только
Null
👨‍💻
если мы берем изначальнй вариант, то там наверное я неправильно делал pipe для прокси
Null
то есть можно сделать вывод, что данного протокола нет. Проверял так await page.setRequestInterception(true); page.on('response', (response) => { const securityDetails = response.securityDetails(); console.log(securityDetails!.protocol()); });
const client = await page.createCDPSession(); client.on("Network.responseReceived", (params) => { if (params.response.protocol === "h3") { console.log(params.response); } }); await client.send("Network.enable");
👨‍💻
а из-за чего такая картина мможет наблюдаться ? новые браузера запускаются, а старые не закрываются
Null
Вообще у хрома есть настройка System -> Continue running background apps when Google Chrome is closed. Но я не знаю в этом ли дело у тебя. По дефолту не должен висеть процесс после закрытия.
👨‍💻
А ты разные инстансы сам запускаешь?
ну, код запускает. 5 штук. Дале я по делаю ctrl+s => "dev": "tsx watch src/index.ts", но раньше проблем таких не было
👨‍💻
опять та же история. У меня максимум запускается 5 браузеров, а тут их явно больше чем 5
👨‍💻
А если закрыть эти 5 браузеров, процессы пропадают?
да, но в какой-то момент сразу резко становится огромное количество
Null
Хром запускает много процессов. Не обращай внимание. У него там на каждую вкладку по процессу. Для сети отдельный процесс и т.п.
👨‍💻
Хром запускает много процессов. Не обращай внимание. У него там на каждую вкладку по процессу. Для сети отдельный процесс и т.п.
ну прикол в том, что после закрытие самого скрипт, vscode и прочего, эти остаются висеть в системных процессах и они пропроц под 0 выкашивают
👨‍💻
Так это ты скрипт закрываешь, а в скрипте есть код для закрытия браузера?
такого нет, но раньше проблем с подобным не было. Браузеры просто крашились грубо говоря самостоятельно после закрытия кода
👨‍💻
вау.. а если запускать докер через vscode, то он тут прям вообще все расписывает
Null
такого нет, но раньше проблем с подобным не было. Браузеры просто крашились грубо говоря самостоятельно после закрытия кода
Ну обычно так и происходит. Но могут быть ошибки, при которых скрипт упадёт, а браузер останется. Поэтому я бы лучше закрывал браузер всегда перед окончанием.
👨‍💻
в общем, я проверил. Даже если browser.close() имеется, у меня браузеры остаются в диспетчере
ISergey
Тут два варианта. По cdp получить все вкладки и закрыть их. (Он сам тогда умрет) Или на уровне ос по pid процесс убить его и его же дочерние . Хотя browser.close обычно как часы работает. Подозреваю что висят просто какие-то левые .
ISergey
Если на винде то удобно смотреть каким-то процесхакером (он дерево нормально рисует )
👨‍💻
Тут два варианта. По cdp получить все вкладки и закрыть их. (Он сам тогда умрет) Или на уровне ос по pid процесс убить его и его же дочерние . Хотя browser.close обычно как часы работает. Подозреваю что висят просто какие-то левые .
у меня нет хрома. Поэтому это именно пупетировские.. В чем ошибка пока вообще понять не могу. Появляется вроде бы просто без какой-либо причины. Даже если закрыть браузер, то почему-то в процессу он остается и прям еще оч сильно нагружает процессор
👨‍💻
у меня даже после browser.close() браузер остается открытым и тупо начинает жрать ресурсы проца. Хотя там как видно 14 мб памяти.. но то есть это даже о странице и речи быть не может. Он прям начинает жрать процессор. Один раз закрыл браузер, так у меня сразу 7 браузеров осталось.. я открывал один, а осталось 7 браузеров и каждые по 10% от проца жрет и начинает бешенно ресурсы проца кушать
👨‍💻
мне еще нравится, что во время работы оперативка со 150 мб на странице прыгает до 650 или иногда до 700.. ЗА 1 страницу всего лишь..
👨‍💻
я все еще полагаю, что проблема не в моем коде. Поскольку после всего несокльких запросов и вновь перехода в режим idle у страницы, у меня браузер начинает жрать нереальное количество ресурсов. Это именно активный браузер, которым пользуюсь. То есть он жрет 11% от проца, когда в idle просто со ткрытой страницей не большще 1%. После нескольких запросов, в браузере ничего не происходит. на втором скрине видно, как в idle режиме после совершенной работы браузер скакнул до 650... вообще без причин
👨‍💻
👨‍💻
👨‍💻
понеслась. В браузере абсолютно ничего не происходит
👨‍💻
После того, как остановил дебагер, то нагрузка упала сразу же. не сильно разбираюсь, но походу что-то рендерится постоянно процессом.. и причем весьма активно
👨‍💻
исходя из этого, он постоянно что-то пытается зарендерить. и я хз, что это. может это специальна нагрузка или защита у сайта такая
👨‍💻
судя по всему при закрытие браузера происходит тоже самое. Поскольку нагрузки идентичные. И браузер сам закрывается, а стек js кода продолжает выполняться и не может звершиться, потому что он бесконечный
👨‍💻
Всё вышеописанное в докере происходит?
нет. Пока все еще в обычном браузере
👨‍💻
я понял причину. Я заблокировал все картинки и прочие ненужные файлы. Он пытался отрендерить какую-то картинку на постоянной основе и уходил в ошибку. И в бесконечный цикл пытается отрендерить картинку какую-то или прочий элемент. Сейчас роазблокировал картинки, нагрузка привычная, 1%. Подозреваю, что и копии сайта больше не будут оставаться
Null
Создай PNG пустые и отдавай их вместо любой блокируемой картинки.
👨‍💻
увы нет.. пробелма с появлением браузера из ниоткуда все также сохраняется. Печально
Null
увы нет.. пробелма с появлением браузера из ниоткуда все также сохраняется. Печально
Заупсти DEBUG=* и там он покажет все действия. Там ты должен увидеть кто инициатор создания таргетов (вкладок, фрэймов и т.п.).
👨‍💻
Создай PNG пустые и отдавай их вместо любой блокируемой картинки.
вот это конечно оч интересно.. как отдать запросу можно другие данные
Null
а в обычном пупетире также можно, как и в докере и браузерлеса?
Да, ты просто должен передать переменную окружения, я не помню как в винде это делается. В linux достаточно перед запуском хрома указать DEBUG=*.
👨‍💻
const launcnOptions = { headless: false, timeout: 99999999, args: [ `--proxy-server=http://localhost:8100`, '--lang=de', '--no-sandbox', '--disable-setuid-sandbox', ] } получается, что где-то здесь задавать нужно
👨‍💻
Я не знаю можно ли через параметры запуска это включить.
ну ща попробую разобраться. Это пока не столь больашя проблема. Браузеры не будут запускать и закрываться по тысячу раз. Скорее неудобно кодить
👨‍💻
/** * The `ResponseForRequest` that gets used if the * interception is allowed to respond (ie, `abort()` is not called). */ responseForRequest(): Partial<ResponseForRequest> | null; вроде бы вот дает ответ на респонс, но правда я не вижу аргументов. Поэтому как вернуть свой ответ - хороший вопрос
👨‍💻
const image = Buffer.from([ 0x47, 0x49, 0x46, 0x38, 0x39, 0x61, 0x01, 0x00, 0x01, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x02, 0x2c, ]) if (/.png|.jpg|.jpeg|.webp|.swg/g.test(interceptedRequest.url())) { return interceptedRequest.respond({ status: 200, contentType: 'image/gif', body: image, }) } Возвращает картинку 1x1 на реквест по картинкам, работает без ошибок. Нагрузка пропала как раз
👨‍💻
можно ли отключить модуль рендеринга картинок, гифок и всего остального у браузера ? на уровне браузерного движка именно. а то смысл от этих фотографий никаких
Null
можно ли отключить модуль рендеринга картинок, гифок и всего остального у браузера ? на уровне браузерного движка именно. а то смысл от этих фотографий никаких
Не знаю, но даже если можно было бы, скорей всего это давало бы много побочных эффектов, которые сайты могли бы отслеживать.
Null
А так он может отдавать картинку, в которой стоит запрет на кэширование, а твой скрипт не вытягивает такую картинку.
Null
а если кеш в браузере запрещен ? у меня флаг на запрет стоит
Это не важно. Нужно со стороны сайта на это смотреть. Они знают что первый раз ты должен загрузить все картинки по дефолту, а потом браузер не будет запрашивать кэшированные картинки. И вот нужно эмулировать такое поведение. В идеале парсить заголовки ответа при первом запросе и смотреть на политику кэширования. Потом составлять таблицу url -> поведение и действовать в соответствии с ней. Но в большинстве случаев это не используется всё же.
👨‍💻
исходя из приколов, котоыре есть на сайте, 80% уделяется интернет соединению
👨‍💻
а все остальное уже с js кодом связанное
👨‍💻
и оч редко берут какие механизмы (api) браузера на детект
👨‍💻
мне вот это шутка не нравится.. она 100% нагружает браузер, пусть и чуток, но канвас берет ресурсы на это. А гифки, запрещены