👨‍💻
browserWsEndopint это не 9222 порт. Нужно сначала туда сходить и там взять путь.
в моем понимании ports: - "9222:3000" должно отлично работать) запрос к 9222 порту, далее докер внутри контейнера перенаправляет его на 3000 порт
👨‍💻
в общем, вопрос тогда как установить другой порт ?
Назар
не в этом дело. Нужно сделать fetch на 9222. Он вернет json, и там будет поле с путем
👨‍💻
не в этом дело. Нужно сделать fetch на 9222. Он вернет json, и там будет поле с путем
fetch('http://browserless:9222') .then(response => response.json()) .then(data => { const webSocketEndpoint = data.webSocketDebuggerUrl; console.log(`WebSocket endpoint: ${webSocketEndpoint}`); }) .catch(error => console.error('Error fetching WebSocket endpoint:', error)); что-то вроде такого ?
Назар
вроде так. Там будет id конкретного инстанса браузера в конце. Каждый перезапуск браузера разный
👨‍💻
точнее на сайте все легко и понятно, но он просто конектится не хочет по какой=то причине
👨‍💻
Вроде бы все выставил. Конект идет по 9222 порту из контейра к контейру browserless, который согласно нетворк сети должен быть доступен, но получаю ошибку, что слева снизу в консоли, мол не могу законектится
👨‍💻
services: browserless: image: browserless/chrome restart: always ports: - "9222:3000" environment: PUPPETEER_EXECUTABLE_PATH: /usr/bin/chromium-browser TIMEOUT: 999999999999 networks: - pictures_picture-generating-network parsebot: build: ./parsebot restart: always # have a single instance of the parsebot service accessible on multiple ports ports: - "3060-3200:3060" environment: server_host: server serverport: 3060 instances: 5 BROWSERLESS_CHROME: ws://browserless:3000 networks: - pictures_picture-generating-network depends_on: - browserless - server треш какой-то, я установил BROWSERLESS_CHROME: ws://browserless:3000 несмотря на то, что поставил порт 9222 контейнеру, так он все равно к 3000 подключается. Чет магия какая-то
👨‍💻
А как подключить proxy в таком случае ? теперь они не хотят работать. import ProxyRouter from '@extra/proxy-router'; puppeteer.use(ProxyRouter({ proxies: { DEFAULT: proxy } })); подключаю таким образом. UPD: насколько я понял подключать так бесполезно. Сделал таким образом: const launchArgs = JSON.stringify({ args: ["--window-size=1920,1080", "--lang=en-US", `--proxy-server=${proxy.protocol}://${proxy.host}:${proxy.port}`], }); const browser = await puppeteer.connect({ browserWSEndpoint: process.env.BROWSERLESS_CHROME+`?launch=${launchArgs}` }) const [page] = (await browser.pages()) await page.authenticate({ username: proxy.login, password: proxy.password, }); но чет все равно не хочет подключаться к прокси? в чем проблема может быть ?
Null
А ещё лучше поднимать локальный прокси без аутентификации, а он уже будет ссылаться на любой тип и аутентификацию. А то там свои заморочки есть. Не все прокси хром умеет использовать.
👨‍💻
А ещё лучше поднимать локальный прокси без аутентификации, а он уже будет ссылаться на любой тип и аутентификацию. А то там свои заморочки есть. Не все прокси хром умеет использовать.
Ну я уже думал об этом. Чисто через pipe начать передавать, а то вообще никак не хотели работать.. Тут конечно немало надо понимать, чтобы поднять несколько интансов пупетира с проксями для этого. Новички вообще вряд ли смогут такое. Процесс далеко не простой
👨‍💻
Можно конечно забить и через pm менеджер поднимать скрипт постоянно. А то докер слишком много приколов выдает
👨‍💻
Нужно использовать такой вариант: http://username:password@127.0.0.1:8001 А page.authenticate убрать.
в общем-то и такой вариант тоже не работает. Печально. Придется сервак отдельный поднимать для проксей
👨‍💻
У меня почему-то даже с сервером прокси не хочет работать ничего... async function startProxyServer(proxyArray: Proxy[], profiles: Profile[]) { const startPort = 8080; // starting port number let currentPort = startPort; proxyArray.forEach((proxy, index) => { const server = net.createServer((socket) => { const proxySocket = new net.Socket(); proxySocket.connect(+proxy.port, proxy.host, () => { // Authenticate with the proxy server proxySocket.write(`CONNECT ${proxy.host}:${proxy.port} HTTP/1.1\r\n`); proxySocket.write(`Proxy-Authorization: Basic ${Buffer.from(`${proxy.login}:${proxy.password}`).toString('base64')}\r\n`); proxySocket.write(`\r\n`); socket.pipe(proxySocket); proxySocket.pipe(socket); }); }); profiles[index].proxy.localHost = `http://localhost:${currentPort}` server.listen(currentPort, () => { console.log(`Proxy server listening on port ${currentPort} for ${proxy.host}`); }); currentPort++; // increment port number for the next proxy server }); } Вот я запускаю серваки для каждого прокси, но у меня вместо того, чтобы к ним подключиться const launchArgs = { args: [ "--window-size=1920,1080", "--lang=en-US", `--proxy-server=${proxy}`, ], }; const browser = await puppeteer.connect({ browserWSEndpoint: process.env.BROWSERLESS_CHROME + `?launch=${launchArgs}`, }); просто использует свою сеть. То есть и речи не идет, чтоб подключиться к проксям. Будто бы --proxy-server=${proxy} вообще не работает. То есть у меня даже не ошибка подключения из-за неправильного логина или пароля, а именно игнорирование --proxy-server
Гарик
Может кому-то нужен курс по ИИ и криптовалюте, отдам безвозмездно, пишите, чтобы тут не спамить
👨‍💻
здесь тоже все нормально. Аргументы при старте передаются, но в чем может быть проблема, я уже совсем не понимаю. Может есть у кого идеи ?
👨‍💻
есть у кого примеры, как можно сделать проксирование трафика через http-proxy ? я что-то не так делаю при поднятие сервера с проксей const proxyServer = createProxyServer({ target: `http://${proxy.host}:${proxy.port}`, // changeOrigin: true, auth: `${proxy.login}:${proxy.password}` }); const server = http.createServer((req, res) => { console.log('пошла вода горячая') proxyServer.web(req, res); }); server.listen(8080, () => { console.log(`Proxy server listening on port ${port}`); }); Но не могу понять, что неправильно. Потом как я делаю запрос const targetUrl = 'https://example.com'; axios.get(targetUrl, { proxy: { host: 'localhost', port: 8080 } }) .then(response => { console.log(response.data); }) .catch(error => { console.error(error); }); то получаю ошибку axios, как на скрине. Я чет помру сейчас.. Вроде бы элементарная задача
ISergey
И я думаю понятно что прокси сервер и браузер должны в одной сети находится .
👨‍💻
И я думаю понятно что прокси сервер и браузер должны в одной сети находится .
ну у меня все сервисы в одной докер сети находятся.. тут проблема в чем-то другом скорее
Null
Решение. Эта ошибка возникает только при изменении поддерживаемого прокси-сервера с «http» на «https». Итак, если вы написали «https://», измените его на «http://». Или наоборот.
👨‍💻
Решение. Эта ошибка возникает только при изменении поддерживаемого прокси-сервера с «http» на «https». Итак, если вы написали «https://», измените его на «http://». Или наоборот.
уже поднял прокси сервер тунель, однако broserless все так и не хочет к прокси подключаться. const browser = await puppeteer.connect({ browserWSEndpoint: process.env.BROWSERLESS_CHROME + `?--proxy-server=${proxy}`, }) заметил только, что --proxy-server нужно ставить именно в ссылку подключения, в таком случае она появляется в аргументах, как показано
👨‍💻
но при этом подключения к прокси у меня все равно нет, однако если делать запрос с любого из сервисов в докере, то связь есть. То есть все работает отлично
👨‍💻
то есть я сделал тунель, он работает, если делать запрос через него, но если браузер пытается что-то получить , то сразу же ошибка
👨‍💻
Если из докера сделать что-то вроде: curl -vvv https://example.com --proxy http://username:password@xxx:3000 то сработает?
работает, но без логина и пароля, потому что я их уже в сервере установил
👨‍💻
Я browserless не пользовался. Судя по всему ты какие-то параметры некорректно передаёшь. А дефолтный контейнер puppeteer пробовал запускать?
не пробовал. Я когда зашел на страницу с описанием, как он запускается, то у меня все желание пропало... Там тихий ужас
👨‍💻
browserless: image: browserless/chrome restart: always ports: - "9222:3000" environment: PUPPETEER_EXECUTABLE_PATH: /usr/bin/chromium-browser CONNECTION_TIMEOUT: 2147483647 # DEFAULT_LAUNCH_ARGS: "--window-size=1920,1080 --lang=en-US" networks: - pictures_picture-generating-network тут чисто пару строчек установить в докере и все работает, а в пупитере там описание на 4 страницы для запуска
👨‍💻
подключение работает из любого контейнера. То есть никаких проблем нет вообще
👨‍💻
уже поднял прокси сервер тунель, однако broserless все так и не хочет к прокси подключаться. const browser = await puppeteer.connect({ browserWSEndpoint: process.env.BROWSERLESS_CHROME + `?--proxy-server=${proxy}`, }) заметил только, что --proxy-server нужно ставить именно в ссылку подключения, в таком случае она появляется в аргументах, как показано
потому что иначе прокси не читается и не записывается никуда. Такой пример нашел на стаке, человек использовал именно такую запись. Если записывать как аргумент, то прокси не появляется как аргумент на данном фото
Null
parsebot корректно работает? Попробуй по IP обратиться к контейнеру.
👨‍💻
parsebot корректно работает? Попробуй по IP обратиться к контейнеру.
100%. Когда по имени обарщаешься, он автоматом конвертит его в айпи. И в любом случае запрос идет по айпи к серверу в конечном итоге
Null
Ну судя по этому ответу, что-то пошло не так.
👨‍💻
curl -x http://parsebot:8080 -L http://example.com работает корректно из любого кнтейнера к серверу прокси Однако curl -vvv https://example.com --proxy http://parsebot:8080 выдает ошибку также из любого контейнера
👨‍💻
исходя из этого, вроде как ssl трафик не хочет гнать как раз
👨‍💻
может быть из-за этого и ошибка как раз
Null
исходя из этого, вроде как ssl трафик не хочет гнать как раз
Ну да, а у тебя прокси может https вообще обрабатывать? Тот, который локальный.
Null
Покажи как ты прокси запускаешь.
👨‍💻
Ну да, а у тебя прокси может https вообще обрабатывать? Тот, который локальный.
теперь может, работает и ssl трафик в том числе. Буду сейчас браузер чекать
👨‍💻
печально. browserless не хочет работать)
Null
печально. browserless не хочет работать)
А логи у прокси сервера есть? Что за ошибка хоть? Или у самого браузера.
Null
У браузерлесса есть опция при запуске -e "DEBUG=-*". Попробуй её включить и посмотреть что он выдаёт при попытке приконнектиться к прокси.
👨‍💻
скриншот такой вот со страницы html
Null
скриншот такой вот со страницы html
Т.е. прокси отработал корректно? Так как запрос прошёл и ошибку не выдало.
Null
скриншот такой вот со страницы html
Но сайт видит твой реальный IP?
👨‍💻
Т.е. прокси отработал корректно? Так как запрос прошёл и ошибку не выдало.
наоборот. Прокси вообще не отработали. Запрос пошел с моего родног оайпи, коль блокировка
👨‍💻
Но сайт видит твой реальный IP?
в моем случае он видит мой айпи, то есть прокси не отработали, как я понимаб
Null
наоборот. Прокси вообще не отработали. Запрос пошел с моего родног оайпи, коль блокировка
Судя по логам, коннект идёт через прокси: "connectionReused":true,"connectionId":27,"remoteIPAddress":"172.24.0.6","remotePort":8080 Как минимум некоторые запросы.
Null
Но сайт может вычислить твой IP через WebRTC, к примеру или через HTTP3.
👨‍💻
а, кажется приехали...
Null
Даже двойной проксированный тунель ?
Проверь, не происходит ли какой-нибудь запрос из браузера через QUIC/HTTP3. Он работает через UDP. И сайт будет видеть твой реальный адрес. Если только твой прокси не умеет работать с этим протоколом.
👨‍💻
Проверь, не происходит ли какой-нибудь запрос из браузера через QUIC/HTTP3. Он работает через UDP. И сайт будет видеть твой реальный адрес. Если только твой прокси не умеет работать с этим протоколом.
у меня на компе вроде как вообще все udp запросы запрещены, но как проверять хз. Буду смотреть сейчас... Также юзер сменить попробую
ISergey
Даже двойной проксированный тунель ?
Та хоть тройной . Хром на параметр —proxy-server ток для тсп реагирует. Если в докере ток один инстанс браузера то проще в него какой-то впн поставить или отдельно роутить весь трафик с него .
ISergey
Я бы и с докером не заморачивался . Ибо там не браузер а дерьмо которое со всех дыр кричит что он под папетиром )))
ISergey
Но если это для тестов то вполне норм .
👨‍💻
Я бы и с докером не заморачивался . Ибо там не браузер а дерьмо которое со всех дыр кричит что он под папетиром )))
за последние часов 8 я вспомнил все матные слова, котоыре только знал. Все отлично работало без докера, и тут я дай я решил, а давайте те ка мы засунем в докер все... круто ведь, удобно
👨‍💻
user-agent я сменил, но результат не поменялся. Все также блокирует. Хотя есть идея конечно, ща попробую зайти и глянуть, с проксей ли зашел или нет
Sasha
В докере надо разбираться от докера до пупитера)
ISergey
Вод для тестов https://www.hyatt.com/ На сайт под управлением просто так не зайдешь . Там относительно не плохой антифрод .
👨‍💻
самый лучший детект е тиктока. На нем че угодно проверять можно
Aleksey
user-agent я сменил, но результат не поменялся. Все также блокирует. Хотя есть идея конечно, ща попробую зайти и глянуть, с проксей ли зашел или нет
Попробуй запустить с публичным прокси В коннекшн стринг параметр подставляется в виде wss://endpointurl?--proxy-server=http://host:port при открытии страницы не забываем await page.authenticate({username: "username", password: "password"}); дальше можно открыть https://api.myip.com/ и посмотреть какой ip выдался
ISergey
Пробуй просто оригинальный хром запускать а не не chromium. Но всеровно нужно закрыть кучу дыр где он говорит что ним управляют. Или покупать всякие сомнительные решения за 10к$
Null
Я бы и с докером не заморачивался . Ибо там не браузер а дерьмо которое со всех дыр кричит что он под папетиром )))
Не всё так плохо. Я в докере поднимаю xvfb, запускаю средствами самой ОС полноценный браузер в стандартном режиме. Скрипты коннектятся к браузеру и выполняют запросы. Такой браузер абсолютно такой же как в обычной десктопной версии Linux. И никаких проблем это не вызывает.
👨‍💻
короче, я проверил. Прокси не подключаются. показывает мой айпи