👨💻
в общем, вопрос тогда как установить другой порт ?
Назар
не в этом дело. Нужно сделать fetch на 9222. Он вернет json, и там будет поле с путем
Назар
Назар
вроде так. Там будет 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
Null
А ещё лучше поднимать локальный прокси без аутентификации, а он уже будет ссылаться на любой тип и аутентификацию. А то там свои заморочки есть. Не все прокси хром умеет использовать.
Null
👨💻
Можно конечно забить и через pm менеджер поднимать скрипт постоянно. А то докер слишком много приколов выдает
👨💻
У меня почему-то даже с сервером прокси не хочет работать ничего...
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
есть у кого примеры, как можно сделать проксирование трафика через 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, как на скрине. Я чет помру сейчас.. Вроде бы элементарная задача
Возьми готовое .
https://www.npmjs.com/package/proxy-chain
ISergey
И я думаю понятно что прокси сервер и браузер должны в одной сети находится .
Null
есть у кого примеры, как можно сделать проксирование трафика через 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, как на скрине. Я чет помру сейчас.. Вроде бы элементарная задача
https://github.com/axios/axios/issues/4840
Null
Решение.
Эта ошибка возникает только при изменении поддерживаемого прокси-сервера с «http» на «https».
Итак, если вы написали «https://», измените его на «http://». Или наоборот.
👨💻
но при этом подключения к прокси у меня все равно нет, однако если делать запрос с любого из сервисов в докере, то связь есть. То есть все работает отлично
👨💻
то есть я сделал тунель, он работает, если делать запрос через него, но если браузер пытается что-то получить , то сразу же ошибка
Null
👨💻
Null
👨💻
👨💻
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 страницы для запуска
👨💻
подключение работает из любого контейнера. То есть никаких проблем нет вообще
Null
👨💻
Null
Null
parsebot корректно работает? Попробуй по IP обратиться к контейнеру.
Null
Ну судя по этому ответу, что-то пошло не так.
👨💻
curl -x http://parsebot:8080 -L http://example.com
работает корректно из любого кнтейнера к серверу прокси
Однако
curl -vvv https://example.com --proxy http://parsebot:8080 выдает ошибку также из любого контейнера
👨💻
исходя из этого, вроде как ssl трафик не хочет гнать как раз
👨💻
может быть из-за этого и ошибка как раз
Null
Null
Покажи как ты прокси запускаешь.
👨💻
👨💻
👨💻
печально. browserless не хочет работать)
Null
У браузерлесса есть опция при запуске -e "DEBUG=-*". Попробуй её включить и посмотреть что он выдаёт при попытке приконнектиться к прокси.
👨💻
👨💻
скриншот такой вот со страницы html
Null
Null
Но сайт может вычислить твой IP через WebRTC, к примеру или через HTTP3.
👨💻
👨💻
Null
Даже двойной проксированный тунель ?
Проверь, не происходит ли какой-нибудь запрос из браузера через QUIC/HTTP3. Он работает через UDP. И сайт будет видеть твой реальный адрес. Если только твой прокси не умеет работать с этим протоколом.
Null
👨💻
ISergey
Даже двойной проксированный тунель ?
Та хоть тройной . Хром на параметр —proxy-server ток для тсп реагирует.
Если в докере ток один инстанс браузера то проще в него какой-то впн поставить или отдельно роутить весь трафик с него .
👨💻
ISergey
Я бы и с докером не заморачивался . Ибо там не браузер а дерьмо которое со всех дыр кричит что он под папетиром )))
ISergey
Но если это для тестов то вполне норм .
👨💻
user-agent я сменил, но результат не поменялся. Все также блокирует. Хотя есть идея конечно, ща попробую зайти и глянуть, с проксей ли зашел или нет
Sasha
В докере надо разбираться от докера до пупитера)
ISergey
Вод для тестов https://www.hyatt.com/
На сайт под управлением просто так не зайдешь . Там относительно не плохой антифрод .
👨💻
👨💻
самый лучший детект е тиктока. На нем че угодно проверять можно
ISergey
Пробуй просто оригинальный хром запускать а не не chromium. Но всеровно нужно закрыть кучу дыр где он говорит что ним управляют. Или покупать всякие сомнительные решения за 10к$
👨💻
короче, я проверил. Прокси не подключаются. показывает мой айпи