CheshireCaat / puppeteer-with-fingerprints

Anonymous automation via puppeteer with fingerprint replacement technology.
MIT License
300 stars 36 forks source link

Проблема с днс при использовании нескольких профилей #126

Closed devnull0111 closed 1 month ago

devnull0111 commented 1 month ago

Здравствуйте, при использовании нескольких профилей одновременно, происходит какая то путаница с днс записями у доменов например foxsports.com не открывается, ошибка сертификата, а сертификат почему от гугла бьется , если ошибку проигнорировать, открывается будто google.com 0_0 пример на скрине. происходит полностью рандомно с рандомными профилями/доменами image setWorkingFolder - папка с инстансом уникальная для каждого профиля userdatadir так же проверено/уникально для каждого профиля прокси проверены/протестированы разные и ип6 и ип4 и моб и обычные - на всех одинаково примерный код для запуска хрома прикладываю воркеры спавнятся через fork() ` plugin.setWorkingFolder(this.instancePath);

        const userDataDir = path.resolve(this.profilePath, profile._id);
        plugin.useProfile(userDataDir, {
            loadFingerprint: true,
            loadProxy: false
        });

        const proxyString = `${profile.proxy.proxyType}${profile.proxy.proxyUsername}:${profile.proxy.proxyPassword}@${profile.proxy.proxyHost}:${profile.proxy.proxyPort}`;

        plugin.useProxy(proxyString, {
            detectExternalIP: true,
            changeGeolocation: true,
            changeBrowserLanguage: true,
            changeTimezone: true,
            changeWebRTC: true
        });

        const chrome = await plugin.spawn({
            headless: headless,
            args: [
                `--no-sandbox`,
                `--disable-gpu`,
                '--disable-setuid-sandbox',
                '--no-first-run',
                '--ignore-certificate-errors',
                '--ignore-certificate-errors-skip-list',
                '--disable-dev-shm-usage',
                '--disable-notifications',
                '--disable-background-timer-throttling',
                '--disable-breakpad',
                '--disable-features=TranslateUI,BlinkGenPropertyTrees',
                '--disable-renderer-backgrounding',
                '--enable-features=NetworkService,NetworkServiceInProcess',
                '--metrics-recording-only',
                '--mute-audio'
            ]
        });`
CheshireCaat commented 1 month ago

You use fork, but the child "workers" created in this way copy the state of the main process, including the require (modules) cache, which can and does lead to several different processes using one instance of the main client anyway, trying to change the working folder and everything in parallel, which in as a result, it leads to race conditions - you do not need to do this.

This may also affect DNS resolve logic. In no case should you do this, even if you synchronize the work - it all makes no sense. Use worker threads, spawn processes, or another equivalent that will create completely separate and isolated processes for you.

Or run browsers in the same process, just changing the path to the profile, but without changing the working folder - it's a little slower, but only at the startup stage, but there will be fewer problems.

It is also better to write the ticket in English in the future.


Вы используете fork, но дочерние "воркеры", созданные таким образом, копируют состояние основного процесса, включая кэш require (модулей), что может привести и приводит к тому, что несколько разных процессов все равно используют один экземпляр основного клиента, пытаясь изменить рабочую папку и все остальное параллельно, что в результате приводит к возникновению race conditions - вам не нужно этого делать.

Это также может повлиять на логику определения DNS. Ни в коем случае не следует этого делать, даже если вы синхронизируете работу - все это не имеет смысла. Используйте worker threads, spawn или другой аналогичный способ, который создаст для вас полностью отдельные и изолированные процессы.

Либо запускайте браузеры в одном процессе, просто меняя путь к профилю, но без изменения рабочей папки - это чуть медленнее, но только на этапе запуска, зато будет меньше проблем.

В будущем также лучше создавать тикеты на английском языке.

devnull0111 commented 1 month ago

Thank you very much. It seems like avoiding fork helped. Is it sufficient to have just one working directory for multi-threading, with only different directories for profiles?

CheshireCaat commented 1 month ago

If you run browsers within the same process, then yes, but if you want to separate them completely, then you can't let two or more processes use the same working directory.