@avant said in python + BAS:
@sergerdn а хоть как то можно?
Можно.
@00ch8 said in Платная помощь! FM/BAS - плохо:
FM плохой? Я создал идеальный инструмент в BAS, но учетные записи блокируются в FM/BAS. Мультилогин работает.
Нужна помощь!
С каким вебсайтом работаешь? Используешь ли мобильные отпечатки в BAS или только настольные компьютеры, как и в Multilogin?
@sergerdn said in Платная помощь! FM/BAS - плохо:
@00ch8 said in Платная помощь! FM/BAS - плохо:
FM плохой? Я создал идеальный инструмент в BAS, но учетные записи блокируются в FM/BAS. Мультилогин работает.
Нужна помощь!
С каким вебсайтом работаешь? Используешь ли мобильные отпечатки в BAS или только настольные компьютеры, как и в Multilogin?
Это лишние вопросы..
Последний апдейт по браузеру был 14 февраля 2022 в версии 24.7.1, с тех пор прошло больше года и ничего существенного исправлено не было, отсюда и низкий результат.
@FastSpace said in Платная помощь! FM/BAS - плохо:
Это лишние вопросы..
Не согласен, так как я может быть знаю конкретный ресурс, о котором идет речь и, может быть знаю, его подводные камни. Про мобильные отпечатки я спросил, потому что я всегда считаю очень плохой идеей их использовать в BAS. Это мое личное отношение, основанное на моем личном опыте.
@FastSpace said in Платная помощь! FM/BAS - плохо:
Последний апдейт по браузеру был 14 февраля 2022 в версии 24.7.1, с тех пор прошло больше года и ничего существенного исправлено не было, отсюда и низкий результат.
Не уверен, что дело ровно в этом, так как всегда есть шанс, что плохому танцору сам знаешь что мешает. Вероятно, если есть какие-то ошибки в BAS, их можно на своей стороне снизить их влияние.
С другой стороны да, пора уже и обновить встроенный браузер в 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=33792034
package.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 мощный костыль ты конечно накидал, но можно проще опять же :) То, про что Фаст говорил, скорее всего относится к стандартным заголовкам, которые можно посмотреть например в инструментах разработчика - и оппа сюрприз, для хрома - они будут отличаться от бассовских - но надо прям очень внимательно сравнивать. И все это хозяйство можно изменить другим способом.