Sasha
Вы на одном и том же железе делаете отрисовку.
Nessy 🫧
Вы на одном и том же железе делаете отрисовку.
Да, но если я запущу виртуальную машину, например, тогда отпечатки будут другие. Или если открою фаерфокс)
Nessy 🫧
А вот хром ни в какую не хочет.
Кирилл
Хах, а зачем тебе озон?
Получить данные о товаре. Анализировать цены.
Slavik
Получить данные о товаре. Анализировать цены.
А, ну ваще там не сложно блокировка обходится
Slavik
Просто обновить нажимай
Slavik
Умеешь?
Обходил
Slavik
Но это было давненько
ISergey
А шрифты можно просто установить в ос . (Но опять же проверяют ток определений набор . ) тоесть в браузере на винде не ожидаются шрифты с макос
ISergey
С коробки на винде у всех шрифты одинаковы (ток некоторый набор софта можно по ним детектить )
Nessy 🫧
Audio тоже практически всегда одинаков . Его подмена ток как маяк буде говорить что что-то не так.
Аудио и шрифты – ок, ладно. Но Канвас и webGL ни коим образом не меняются. А все чекеры типо browserleaks и http://fingerprints.bablosoft.com/canvas никаких изменений не видят, т.е. даже шум добавить не получается.
ISergey
Он там не нужен. Карта gtx 1080 и 3080 скоройвсего дадут одинаковый канвас (ток название будет отличатся ). WebGl (название карты ) можно менять и то с умом ( тот же Папетир стелс это умеет )
ISergey
Но нормальный антифрод Папетир и всякие Папетир стелсы детектят сразу поэтому толку от изменений мало будет ))) зависит от сайта с которым работать нужно .
Светлана
парни, мб я дегенерат, но юзаем для скриншотных e2e тестов штуковину, которая под капотом на puppeteer, сталкиваемся с флапами в духе "успела ли пройти проверка орфографии". В связи с чем вопрос: как отрубить к ебеням проверку орфографии в запускаемом puppeteer-ом браузере?
Nessy 🫧
Если я правильно понял тебя
Светлана
Аргумент --disable-spell-checking
спасибо большое
Ilya
Всем привет, знает кто как обнаружить Puppeteer? Необходимо для AntiDDOS системы
Null
Всем привет, знает кто как обнаружить Puppeteer? Необходимо для AntiDDOS системы
Есть разные способы. Можно почитать тут, к примеру. Какие-то способы устарели или их довольно просто обходить, какие-то можно применить. Но всё зависит от конкретного ботовода и используемых им методик. https://antoinevastel.com/
Ilya
Есть разные способы. Можно почитать тут, к примеру. Какие-то способы устарели или их довольно просто обходить, какие-то можно применить. Но всё зависит от конкретного ботовода и используемых им методик. https://antoinevastel.com/
Да, но увы они уже недействительны на сегодняшний день… и данный человек больше не публикует статей по обнаружениям т.к работает в datadome, я замечал часто puppeteer_utility_world его вызвать возможно? Либо pptr:internal
Null
Да, но увы они уже недействительны на сегодняшний день… и данный человек больше не публикует статей по обнаружениям т.к работает в datadome, я замечал часто puppeteer_utility_world его вызвать возможно? Либо pptr:internal
Нет универсальных готовых решений. И без понимания что и как работает едва ли удастся защититься от этого. Только самому собирать информацию и нарабатывать опыт. Думаю, любое публичное решение по детекту ботов сразу же станет бесполезным, потому что ботоводы не спят :)
🅰️nimeCoder
вот все такие умные) одним защиту от детекта, а другим универсальное надежное решение по обнаружению
Ilya
вот все такие умные) одним защиту от детекта, а другим универсальное надежное решение по обнаружению
Ну по факту только голый puppeteer обнаружить хотелось бы) Подмены я и так увижу. Но в процессе исследования я заметил что puppeteer генерирует неизвестный рандомный http2 frame setting. Возможно это обнаруживает datadome.
Ilya
Этот процесс не используется для каких-либо незаконных целей. Это исключительно личное исследование, которое будет интегрировано в систему защиты от DDoS-атак.
Null
Ну по факту только голый puppeteer обнаружить хотелось бы) Подмены я и так увижу. Но в процессе исследования я заметил что puppeteer генерирует неизвестный рандомный http2 frame setting. Возможно это обнаруживает datadome.
Так у Вастеля как раз есть это. Там, где подмена какой-нибудь функции, которую вызовет код бота, и сгенерировать внутри ошибку, внутри будет "puppeter что-то там".
Null
Но я не проверял это на свежих версиях.
Ilya
throw err, я проверял это, уже неактуально. Возможно в старых версиях были данные утечки
Ilya
они как раз были связаны с puppeteer_evaluation_script
Ilya
puppeteer extra stealth я обнаружил
🅰️nimeCoder
eval вроде
Ilya
Но стандартный puppeteer не разобрался как обнаружить, да и в интернете не нашел свежей информации
🅰️nimeCoder
это все легко обходится
Null
puppeteer extra stealth я обнаружил
Так без него тем-более должен уметь определять.
Ilya
eval вроде
можно подробнее?
🅰️nimeCoder
можно подробнее?
когда папитер делает evaluate он вызывает на странице свою функцию обертку которая подставляет куда надо что надо и потом оборачивает если нужно как надо в промис и прочее, потом вроде пихает в eval
🅰️nimeCoder
если записать в нужные системные функции Null / undefined и др, оно отвалится
🅰️nimeCoder
но это фиксится банальным копированием всех нужных функций в прелоаде
🅰️nimeCoder
я как то с челом обходил. надо поискать
Ilya
Буду благодарен за эту информацию
🅰️nimeCoder
https://t.me/nodejs_ru/1213272
🅰️nimeCoder
да, eval
🅰️nimeCoder
записать туда что-то и оно сломает evaluate у папитера
🅰️nimeCoder
window.eval = () => {}
Ilya
Спасибо огромное!!!! Сейчас проверю
🅰️nimeCoder
https://t.me/nodejs_ru/1213272
тут я как решение обхода предложил сделать копию eval до загрузки, и потом восстановить ее после
🅰️nimeCoder
Как варик можно глянуть все папитеровские скрипты, найти похожие вещи и просто сломать все
🅰️nimeCoder
Чувак там достаточно долго добался с патитером тогда, у него на многое апи сыпало просто
Null
записать туда что-то и оно сломает evaluate у папитера
Я, к примеру не использую evaluate :) Обычно достаточно DOM.getDocument, DOM.getBoxModel и увправление мышкой с клавиатурой. Т.е. я не использую никаких внутренних функций на странице. Я не знаю можно ли это как-то спалить вообще.
Null
Но я мало где пока это пробовал, просто свою либу пишу понемногу, когда время есть.
Null
Цель как раз обойтись только базовыми методами CDP и управление исключительно мышкой/клавиатурой. Никаких подмен элементов на странице, никаких фэйковых внутренних кликов (как некоторые любят, почему-то).
Murod
code: const puppeteer = require('puppeteer'); (async () => { const browser = await puppeteer.launch({ headless: false, executablePath: 'C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe', slowMo: 250, // slow down by 250ms devtools: true, args: [ '--user-data-dir=%userprofile%\\AppData\\Local\\Chrome\\User Data', '--profile-directory=Profile 2', ], }); const page = await browser.newPage(); console.log(page); // await browser.close(); })(); error: C:\Users\murod\WebstormProjects\pup\node_modules\@puppeteer\browsers\lib\cjs\launch.js:310 reject(new Error([ ^ Error: Failed to launch the browser process! TROUBLESHOOTING: https://pptr.dev/troubleshooting at ChildProcess.onClose (C:\Users\murod\WebstormProjects\pup\node_modules\@puppeteer\browsers\lib\cjs\launch.js:310:24) at ChildProcess.emit (node:events:531:35) at ChildProcess._handle.onexit (node:internal/child_process:294:12) Node.js v20.14.0
Murod
привет всем. ребята, запускается и открывается новая вкладка с профилем. но дальше управлять не дает с ошибка терминирует скрипт. есть идея?
Null
привет всем. ребята, запускается и открывается новая вкладка с профилем. но дальше управлять не дает с ошибка терминирует скрипт. есть идея?
Возможно ты пытаешься запустить ещё один браузер? Потому что пишет что не может запустить процесс, а ты пишешь что процесс уже запущен.
Null
code: const puppeteer = require('puppeteer'); (async () => { const browser = await puppeteer.launch({ headless: false, executablePath: 'C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe', slowMo: 250, // slow down by 250ms devtools: true, args: [ '--user-data-dir=%userprofile%\\AppData\\Local\\Chrome\\User Data', '--profile-directory=Profile 2', ], }); const page = await browser.newPage(); console.log(page); // await browser.close(); })(); error: C:\Users\murod\WebstormProjects\pup\node_modules\@puppeteer\browsers\lib\cjs\launch.js:310 reject(new Error([ ^ Error: Failed to launch the browser process! TROUBLESHOOTING: https://pptr.dev/troubleshooting at ChildProcess.onClose (C:\Users\murod\WebstormProjects\pup\node_modules\@puppeteer\browsers\lib\cjs\launch.js:310:24) at ChildProcess.emit (node:events:531:35) at ChildProcess._handle.onexit (node:internal/child_process:294:12) Node.js v20.14.0
Это всеь код? У меня он выполняется корректно. Если это не весь код, покажи что ещё есть.
Murod
да у меня был запущен инстанс хрома
Murod
почему cloudFlare не проходить без resolution?
Murod
почему cloudFlare не проходить без resolution?
как вы видите запускал хром через nodejs script с моим профилом
Murod
Null
как cloudFlare узнает что это не человек?
У него полно способов это проверить. Ранее неоднократно это обсуждалось. Начни с плагина стелс и почитай как и что там обходится.
Null
А дальше уже самому изучать вопрос и экспериментировать.
Murod
привет ребята, кто-нибудь сможет помочь за оплату обходить cloudFlare turnstile на nodejs с помощью puppeteer или selenium?
Black_Yuzia
Усім привіт. Запустив puppeteer в середині докера. І не виходить отримати доступ поза межами контейнера (навіть з іншого контейнера у одній мережі або з локалхоста). Тільки якщо зробити запит з самого контейнера puppeteer-service. При цьому я передаю параметр --remote-debugging-address=0.0.0.0 У чому проблема? UPD: fixed, просто перестворив контейнер і воно встало на 0.0.0.0 Я хз як це працює...
Black_Yuzia
Black_Yuzia
Murod
(function(){ window._cf_chl_opt={ cvId: '3', cZone: 'challenges.cloudflare.com', cTplV: 5, chlApivId: '0', chlApiWidgetId: 'kz1ae', chlApiSitekey: '0x4AAAAAAAVrOwQWPlm3Bnr5', chlApiMode: 'managed', chlApiSize: 'normal', chlApiRcV: '1/ULFbROfiTVNV4oY', chlApiTimeoutEncountered: 0, chlApiOverrunBudgetMs: 10000, chlTimeoutMs: 120000, cK: "visitor-time", cType: 'chl_api_m', cNounce: '20835', cRay: '893fda3e1ca69924', cHash: '591096e64a06eb5', cFPWv: 'g', cLt: 'n', cRq: { ru: 'aHR0cDovL2NoYWxsZW5nZXMuY2xvdWRmbGFyZS5jb20vY2RuLWNnaS9jaGFsbGVuZ2UtcGxhdGZvcm0vaC9nL3R1cm5zdGlsZS9pZi9vdjIvYXYwL3JjdjAvMC9rejFhZS8weDRBQUFBQUFBVnJPd1FXUGxtM0JucjUvYXV0by9ub3JtYWw=', ra: 'TW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NDsgcnY6MTI3LjApIEdlY2tvLzIwMTAwMTAxIEZpcmVmb3gvMTI3LjA=', rm: 'R0VU', d: 'jPx1A69x0xRlL2dSDMIW3VvDZjLpPX2FfU+ZYSCxOGoFqxc2NGxiKTQDXl6P9pEGmex9JzK8AUMGfQHqnnhwmpXeyzpS5SYj0d/SuIWMxQRTdEs+ZIy5JJiPZpQ5iSe+BNU/BFOosPcHv7eVnk1NI+tHHpeW6eghRUZ8DDDt4YfmN5SjFAqTr+VUQg5jTQhM0MpU+ZoRWztYCztA6P6noOJNm1XgUxT7iWwgGrwj1LPuWS2GyYQHIU9qw2s4YZUSs+jgDjrDhNKtOFkaJA/p0LEaWRBfH5TX1S0jIk93wgmw7E4HuRAIDsIQAv0jvexzJtxMUykWi4qr8TlJ5+t3DVKWLHRXA+XB/AvhPto/w8QvRtDDy0icmjL86kxEfdcw2Ljfz7VmhG9HShl95C/5HCMTv72HL1H0BdODvSmFsQRYaqnGKWYZ/CIMEydjXRuAsWu7ALCCjLstmK83e2smKUMqWzseLW2VsPPUQ+LRWaOAB3XARnrucUzXGyiv2zM91tSz5prI10Mx/DuDJ0y4vh4VVGl1JA7ZF1zGc7csoTeU25z0p+u+vZ8Q28lL4WAShB275ymIrA7SSZK0IayFdTnjrvlFbpExpfAMPFQyRXep1zsDEQlGlY8xGvJBNzU5jYczVMHyG7uzPdNztNeZJdDlf/qrkdVilQM/E9YGZyMsHsOJcOBeN/hjZJXuvBY86GJ7JC7uhVyBSBqTmM3l0ff16rZ6McVkCfmtmRM0OsIFMBFOZPqHNABXSi78WaI0tw+CEo/A0OdkWvPp6quwid9jQBzVQzbre1VTdXFuIRg=', t: 'MTcxODQyNjExNi44Mjc=', m: 'i8hez2XqzQxa5c7whBGkoJbKgrJq5VnpJUlte/6Ifz4=', i1: 'oyHtJgZ6IC++KHXwejkfIQ==', i2: 'SENg6TyJ0ZohGABikWcHbA==', uh: 'm9HTIG1MjO6HgIMNioWp91gU2l38tPvkTIRzmRdqdFM=', hh: 'WCiLdNo2uN2aXsfJJhG2HFkP3bOo0fw8tsFAppLisvs=', zh: '9D+zbxCfwBPyr1pF5Wb5E9kRItcGU2xCgzO1zGTKToQ=', }, refresh: function(){ if(window['parent']){ window['parent'].postMessage({ source: 'cloudflare-challenge', widgetId: 'kz1ae', nextRcV: '1/ULFbROfiTVNV4oY', event: 'reloadRequest', }, "*"); } } }; var handler = function(event) { var e = event.data; if (e.source && e.source === 'cloudflare-challenge' && e.event === 'meow' && e.widgetId === window._cf_chl_opt.chlApiWidgetId) { if(window['parent']){ window['parent'].postMessage({ source: 'cloudflare-challenge', widgetId: window._cf_chl_opt.chlApiWidgetId, event: 'food', seq: e.seq, }, "*"); } } } if (window.addEventListener) { window.addEventListener('message', handler); } else { window.attachEvent('onmessage', handler); } }());
Murod
(function(){ window._cf_chl_opt={ cvId: '3', cZone: 'challenges.cloudflare.com', cTplV: 5, chlApivId: '0', chlApiWidgetId: 'kz1ae', chlApiSitekey: '0x4AAAAAAAVrOwQWPlm3Bnr5', chlApiMode: 'managed', chlApiSize: 'normal', chlApiRcV: '1/ULFbROfiTVNV4oY', chlApiTimeoutEncountered: 0, chlApiOverrunBudgetMs: 10000, chlTimeoutMs: 120000, cK: "visitor-time", cType: 'chl_api_m', cNounce: '20835', cRay: '893fda3e1ca69924', cHash: '591096e64a06eb5', cFPWv: 'g', cLt: 'n', cRq: { ru: 'aHR0cDovL2NoYWxsZW5nZXMuY2xvdWRmbGFyZS5jb20vY2RuLWNnaS9jaGFsbGVuZ2UtcGxhdGZvcm0vaC9nL3R1cm5zdGlsZS9pZi9vdjIvYXYwL3JjdjAvMC9rejFhZS8weDRBQUFBQUFBVnJPd1FXUGxtM0JucjUvYXV0by9ub3JtYWw=', ra: 'TW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NDsgcnY6MTI3LjApIEdlY2tvLzIwMTAwMTAxIEZpcmVmb3gvMTI3LjA=', rm: 'R0VU', d: 'jPx1A69x0xRlL2dSDMIW3VvDZjLpPX2FfU+ZYSCxOGoFqxc2NGxiKTQDXl6P9pEGmex9JzK8AUMGfQHqnnhwmpXeyzpS5SYj0d/SuIWMxQRTdEs+ZIy5JJiPZpQ5iSe+BNU/BFOosPcHv7eVnk1NI+tHHpeW6eghRUZ8DDDt4YfmN5SjFAqTr+VUQg5jTQhM0MpU+ZoRWztYCztA6P6noOJNm1XgUxT7iWwgGrwj1LPuWS2GyYQHIU9qw2s4YZUSs+jgDjrDhNKtOFkaJA/p0LEaWRBfH5TX1S0jIk93wgmw7E4HuRAIDsIQAv0jvexzJtxMUykWi4qr8TlJ5+t3DVKWLHRXA+XB/AvhPto/w8QvRtDDy0icmjL86kxEfdcw2Ljfz7VmhG9HShl95C/5HCMTv72HL1H0BdODvSmFsQRYaqnGKWYZ/CIMEydjXRuAsWu7ALCCjLstmK83e2smKUMqWzseLW2VsPPUQ+LRWaOAB3XARnrucUzXGyiv2zM91tSz5prI10Mx/DuDJ0y4vh4VVGl1JA7ZF1zGc7csoTeU25z0p+u+vZ8Q28lL4WAShB275ymIrA7SSZK0IayFdTnjrvlFbpExpfAMPFQyRXep1zsDEQlGlY8xGvJBNzU5jYczVMHyG7uzPdNztNeZJdDlf/qrkdVilQM/E9YGZyMsHsOJcOBeN/hjZJXuvBY86GJ7JC7uhVyBSBqTmM3l0ff16rZ6McVkCfmtmRM0OsIFMBFOZPqHNABXSi78WaI0tw+CEo/A0OdkWvPp6quwid9jQBzVQzbre1VTdXFuIRg=', t: 'MTcxODQyNjExNi44Mjc=', m: 'i8hez2XqzQxa5c7whBGkoJbKgrJq5VnpJUlte/6Ifz4=', i1: 'oyHtJgZ6IC++KHXwejkfIQ==', i2: 'SENg6TyJ0ZohGABikWcHbA==', uh: 'm9HTIG1MjO6HgIMNioWp91gU2l38tPvkTIRzmRdqdFM=', hh: 'WCiLdNo2uN2aXsfJJhG2HFkP3bOo0fw8tsFAppLisvs=', zh: '9D+zbxCfwBPyr1pF5Wb5E9kRItcGU2xCgzO1zGTKToQ=', }, refresh: function(){ if(window['parent']){ window['parent'].postMessage({ source: 'cloudflare-challenge', widgetId: 'kz1ae', nextRcV: '1/ULFbROfiTVNV4oY', event: 'reloadRequest', }, "*"); } } }; var handler = function(event) { var e = event.data; if (e.source && e.source === 'cloudflare-challenge' && e.event === 'meow' && e.widgetId === window._cf_chl_opt.chlApiWidgetId) { if(window['parent']){ window['parent'].postMessage({ source: 'cloudflare-challenge', widgetId: window._cf_chl_opt.chlApiWidgetId, event: 'food', seq: e.seq, }, "*"); } } } if (window.addEventListener) { window.addEventListener('message', handler); } else { window.attachEvent('onmessage', handler); } }());
как вытащить эту string?
Slavik
как вытащить эту string?
Так это не стринг