@deepl123 Обсудить в моем телеграмме.
Платная помощь! FM/BAS - плохо
-
@FastSpace said in Платная помощь! FM/BAS - плохо:
@sergerdn причём тут танцор, там заголовки неправильные уходят даже :) это такая основа что жесть
Дай, пожалуйста, один конкретный пример конкретного заголовка. Какой есть заголовок, какой должен быть и при какой конкретной ситуации все должно происходить.
-
@FastSpace это не проблема движка, эта проблема в том что они в Фингер криво кладутся.
-
@sergerdn said in Платная помощь! FM/BAS - плохо:
@FastSpace said in Платная помощь! FM/BAS - плохо:
@sergerdn причём тут танцор, там заголовки неправильные уходят даже :) это такая основа что жесть
Дай, пожалуйста, один конкретный пример конкретного заголовка. Какой есть заголовок, какой должен быть и при какой конкретной ситуации все должно происходить.
Вот пожалуйста.
Заголовок RTT (что это такое гуглим), браузер сам адекватно подстраивает этот заголовок под твоё интернет соединение, а BAS нет, он забирает то что удалось взялось у юзера, не учитывая специфики что твоё прокси не равно интернет соединению юзера. Плюс для всех сайтов этот заголовок одинаковен... xD -
@FastSpace кстати интересная штука, я вот тоже думал, влияют ли данные с отпечатка на скорость соединения, или просто данные.
Ну то есть данные в отпечатки 3g и будем ползти на три Джи? Жалуется у меня периодически знакомый, мол через бас ползет прокси, а через мульти логин отлично та же прокся работает... -
@FastSpace said in Платная помощь! FM/BAS - плохо:
@sergerdn said in Платная помощь! FM/BAS - плохо:
@FastSpace said in Платная помощь! FM/BAS - плохо:
@sergerdn причём тут танцор, там заголовки неправильные уходят даже :) это такая основа что жесть
Дай, пожалуйста, один конкретный пример конкретного заголовка. Какой есть заголовок, какой должен быть и при какой конкретной ситуации все должно происходить.
Вот пожалуйста.
Заголовок RTT (что это такое гуглим), браузер сам адекватно подстраивает этот заголовок под твоё интернет соединение, а BAS нет, он забирает то что удалось взялось у юзера, не учитывая специфики что твоё прокси не равно интернет соединению юзера. Плюс для всех сайтов этот заголовок одинаковен... xDДай конкретную инструкцию. Например, я должен открыть конкретный сайт, обновить страницу, попить кофе, обновить страницу опять и увидеть конкретный заголовок или конкретные варианты заголовка.
-
@Bigma said in Платная помощь! FM/BAS - плохо:
@FastSpace кстати интересная штука, я вот тоже думал, влияют ли данные с отпечатка на скорость соединения, или просто данные.
Ну то есть данные в отпечатки 3g и будем ползти на три Джи? Жалуется у меня периодически знакомый, мол через бас ползет прокси, а через мульти логин отлично та же прокся работает...Думаю нет, в бас за проксирование отвечает своё решение.
У меня тоже прокси в BAS хуже работает, даже того же дильфина, но в BAS шас выручает квик, протокол топчик. В дильфине его нетДай конкретную инструкцию. Например, я должен открыть конкретный сайт, обновить страницу, попить кофе, обновить страницу опять и увидеть конкретный заголовок или конкретные варианты заголовка.
Зачем? Что это изменит?
Десктоп в BAS ничем не лучше мобилы, если у одного сотня утечек, у другого поменьше раза в 2 это не меняет общую ситуацию ни коим образом -
@FastSpace я почему подумал, в инструментах разработчика можно ограничить скорость соединения поставив 3g, главное, чтоб бас не делал тоже самое 😁 надо как то это проверить. Поймать отпечаток с 3g и замерить скорость без прокси и сравнить с обычным хромом...


-
@Bigma said in Платная помощь! FM/BAS - плохо:
@FastSpace я почему подумал, в инструментах разработчика можно ограничить скорость соединения поставив 3g, главное, чтоб бас не делал тоже самое 😁 надо как то это проверить. Поймать отпечаток с 3g и замерить скорость без прокси и сравнить с обычным хромом...
Знаю я про эту фичу, то что ты видишь там на сайтах детекторах это всего лишь вывеска - заглушка, врятли хромимум у BAS вмешивается в работу прокси (за прокси отвечает своё решение) таким образом, хотя проверить стоит.
-
@FastSpace это не прокси, это механизм задержки соединения, ну как то так.
-
@Bigma said in Платная помощь! FM/BAS - плохо:
@FastSpace это не прокси, это механизм задержки соединения, ну как то так.
Я знаю, если самому эти настройки выставить, то прокси будет работать с той скоростью которую ты указал, а если просто параметр из отпечатка, то врятли
-
@FastSpace said in Платная помощь! FM/BAS - плохо:
Зачем? Что это изменит?
Наверное, потому что тебя попросили. Так как ты не дал подробных инструкций, я додумал логику.
Это третий скрипт, который я написал в жизни на
javascriptиpuppeteer, что может говорить, что некоторые вещи могут быть не сложными, даже для не очень опытных кодеров. Времени у меня ушло на исследование вопроса и написание скрипта меньше часа.Можно реализовать установку любых заголовков в любое время. Вероятно, можно реализовать подобное и в BAS. Но надо знать его очень хорошо, а у меня его ограниченное знание.
Вероятно, в скрипте могут быть ошибки, так как у меня ограниченный опыт с
javascript.Иногда все таки дело в танцоре, а не инструменте.

/* This code sets up a Puppeteer browser instance with a specific profile directory and fingerprint. It then launches a new page and intercepts the requests made by that page, modifying specified headers if they exist. It navigates to a URL and takes a screenshot of the full page before closing the browser. */ require("dotenv").config(); const {plugin} = require("puppeteer-with-fingerprints"); const fs = require("fs").promises; const path = require("path"); async function interceptRequests(page, headers) { // Enable request interception for the given page await page.setRequestInterception(true); // Listen for incoming requests on the page page.on("request", iRequest => { // Get the headers of the incoming request const requestHeaders = iRequest.headers(); let headerIntercepted = false; // Check if any of the specified headers are present in the request headers for (const [headerName, headerValue] of Object.entries(headers)) { if (requestHeaders[headerName]) { // If a header is present, modify its value and log the change console.log(`Header intercepted from "${headerName}: ${requestHeaders[headerName]}" to "${headerName}: ${headerValue}" for URL: ${iRequest.url()}`); requestHeaders[headerName] = headerValue; headerIntercepted = true; } } // Continue the request with the modified headers if any headers were intercepted if (headerIntercepted) { iRequest.continue({headers: requestHeaders}); } else { iRequest.continue(); } }); } async function runAll(profileDirectory, fpKey) { // Check if the profile directory exists, and create it if it doesn't try { await fs.access(profileDirectory); } catch { await fs.mkdir(profileDirectory, {recursive: false}); } // Check if the fingerprint file already exists: const fingerprintFilePath = path.join(profileDirectory, "fingerprint.json"); let fingerprint; if (await fs.access(fingerprintFilePath).then(() => true).catch(() => false)) { // Read the fingerprint from the file: const fingerprintData = await fs.readFile(fingerprintFilePath, "utf-8"); fingerprint = JSON.parse(fingerprintData); } else { // Fetch a fingerprint from the server: fingerprint = await plugin.fetch(fpKey, { tags: ["Microsoft Windows", "Chrome"], minBrowserVersion: "110" }); // Write the fingerprint to a file in the profile directory: await fs.writeFile(fingerprintFilePath, JSON.stringify(fingerprint)); } // Apply fingerprint: plugin.useFingerprint(fingerprint); // Launch a new browser instance with the specified profile directory: const browser = await plugin.launch({ args: [`--user-data-dir=${profileDirectory}`], headless: false, }); // Create a new page in the browser: const page = await browser.newPage(); // Intercept requests and modify the headers if present: await interceptRequests(page, { "downlink": "downlink_any_value", "rrt": "rrt_any_value", "device-memory": "device-memory_any_value" }); // Navigate to the specified URL: await page.goto("https://browserleaks.com/client-hints"); // Wait for the page to finish loading: page.waitForNavigation() .then(() => { // Do something after the navigation is successful }) .catch(() => { // Handle navigation error }); // Take a screenshot of the page: await page.screenshot({path: path.join(path.dirname(__filename), "screenshot.png"), fullPage: true}); // Close the browser: await browser.close(); } // Run the function with the specified profile directory and fingerprint key: (async () => { const profileDirectory = path.join(path.dirname(__filename), ".profile-http-headers"); const fpKey = process.env.FINGERPRINT_KEY ?? ""; console.log(`running with profile: ${profileDirectory}`); await runAll(profileDirectory, fpKey); })();Logs:
$ node example_http_headers.js running with profile: D:\Projects\WebStorm\others\puppeteer-with-fingerprints_test1\.profile-http-headers Header intercepted from "downlink: 10" to "downlink: downlink_any_value" for URL: https://browserleaks.com/client-hints Header intercepted from "device-memory: 8" to "device-memory: device-memory_any_value" for URL: https://browserleaks.com/client-hints Header intercepted from "downlink: 10" to "downlink: downlink_any_value" for URL: https://browserleaks.com/css/style.css?v=57762431 Header intercepted from "device-memory: 8" to "device-memory: device-memory_any_value" for URL: https://browserleaks.com/css/style.css?v=57762431 Header intercepted from "downlink: 10" to "downlink: downlink_any_value" for URL: https://browserleaks.com/js/jquery.min.js?v=33792034 Header intercepted from "device-memory: 8" to "device-memory: device-memory_any_value" for URL: https://browserleaks.com/js/jquery.min.js?v=33792034 Header intercepted from "downlink: 10" to "downlink: downlink_any_value" for URL: https://browserleaks.com/js/default.js?v=57762431 Header intercepted from "device-memory: 8" to "device-memory: device-memory_any_value" for URL: https://browserleaks.com/js/default.js?v=57762431 Header intercepted from "downlink: 10" to "downlink: downlink_any_value" for URL: https://browserleaks.com/js/client-hints.js?v=57762431 Header intercepted from "device-memory: 8" to "device-memory: device-memory_any_value" for URL: https://browserleaks.com/js/client-hints.js?v=57762431 Header intercepted from "downlink: 10" to "downlink: downlink_any_value" for URL: https://browserleaks.com/img/logo_hand.svg?v=33792034 Header intercepted from "device-memory: 8" to "device-memory: device-memory_any_value" for URL: https://browserleaks.com/img/logo_hand.svg?v=33792034 Header intercepted from "downlink: 10" to "downlink: downlink_any_value" for URL: https://browserleaks.com/img/logo.png?v=33792034 Header intercepted from "device-memory: 8" to "device-memory: device-memory_any_value" for URL: https://browserleaks.com/img/logo.png?v=33792034 Header intercepted from "downlink: 10" to "downlink: downlink_any_value" for URL: https://browserleaks.com/client-hints/iframe Header intercepted from "device-memory: 8" to "device-memory: device-memory_any_value" for URL: https://browserleaks.com/client-hints/iframe Header intercepted from "downlink: 10" to "downlink: downlink_any_value" for URL: https://browserleaks.com/manifest.json?v=33792034 Header intercepted from "device-memory: 8" to "device-memory: device-memory_any_value" for URL: https://browserleaks.com/manifest.json?v=33792034package.json:
{ "name": "puppeteer-with-fingerprints_test1", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "author": "", "license": "ISC", "dependencies": { "dotenv": "^16.0.3", "puppeteer": "^19.7.3", "puppeteer-with-fingerprints": "github:CheshireCaat/puppeteer-with-fingerprints" }, "devDependencies": { "eslint": "^8.35.0" } } -
@sergerdn мощный костыль ты конечно накидал, но можно проще опять же :) То, про что Фаст говорил, скорее всего относится к стандартным заголовкам, которые можно посмотреть например в инструментах разработчика - и оппа сюрприз, для хрома - они будут отличаться от бассовских - но надо прям очень внимательно сравнивать. И все это хозяйство можно изменить другим способом.
-
@Bigma said in Платная помощь! FM/BAS - плохо:
@sergerdn мощный костыль ты конечно накидал
Мой код использует вполне себе стандартный api
puppeteer, поэтому, вероятно, он не костыльный.
В примере выше куча кода для обвязки, сам рабочий код, что относится к фильтрации заголовков, очень маленький.Отдельно код фильтрации заголовков без комментариев в коде:
async function interceptRequests(page, headers) { await page.setRequestInterception(true); page.on("request", iRequest => { const requestHeaders = iRequest.headers(); let headerIntercepted = false; for (const [headerName, headerValue] of Object.entries(headers)) { if (requestHeaders[headerName]) { console.log(`Header intercepted from "${headerName}: ${requestHeaders[headerName]}" to "${headerName}: ${headerValue}" for URL: ${iRequest.url()}`); requestHeaders[headerName] = headerValue; headerIntercepted = true; } } if (headerIntercepted) { iRequest.continue({headers: requestHeaders}); } else { iRequest.continue(); } }); } await interceptRequests(page, { "downlink": "downlink_any_value", "rrt": "rrt_any_value", "device-memory": "device-memory_any_value" });@Bigma said in Платная помощь! FM/BAS - плохо:
@sergerdn .. но можно проще опять же :)
Если у тебя есть решение проще, я удовольствием почитаю любые твои предложения по фильтрации/изменении/удалении/etc заголовков и посмотрю твой код реализации.
@Bigma said in Платная помощь! FM/BAS - плохо:
И все это хозяйство можно изменить другим способом.
Согласен, решение, что я предложил не единственное. Я делал подобную задачу еще другими двумя способами, но общая идея у них одна - перехватывать и манипулировать заголовками.