Отличие puppeteer windows и linux в hcapcha?

Array.prototype.forEachSync = async function(f) {
        var mass = [...this];
    //
    for(var n = 0; n < mass.length; n++) {
        if(await f(mass[n], n) == false) {break;};
    }
}; async function wait(ms) {return new Promise(r => {setTimeout(r, ms)});};
//
({
    lib: {
        'puppeteer-real-browser': require('puppeteer-real-browser'),
    },
    //
    save: {
        url: 'https://www.yeschat.ai/gpts-ZxX7eSA7-ResearchGPT',
    },
    //
    start: async function(text, img) {
        //
        var SB = true;
        //
        const screen = async () => {
            while(true) {
                if(SB) {
                    try {
                        await this.page.screenshot({ path: 'screen.png' }); console.log('Скрин');
                    } catch (error) {} 
                    //
                    await wait(2555);
                } else {
                    break;
                }
            }
        };setTimeout(screen, 5000);
        //
        while(true) {
            try {
                const i = await this.input(text, img);
                //
                SB = false; await this.close();
                //
                return i;
            } catch (error) {
                await this.close();
                //
                console.log('Ошибка gpt, пересоздание', error.toString());
                //
                await wait(5000);
            }
        }
        //
    },
    //
    input: async function(text, img) {
        console.log(1.1);
        //
        const { connect } = this.lib["puppeteer-real-browser"];
        //
        const { browser, page } = await connect({
            headless: false,
            turnstile: true,
            disableXvfb: false,
            ignoreAllFlags: false,
            ...((require('os').type()) !== 'Windows_NT' ? { 
                args: [
                    '--no-sandbox', '--disable-setuid-sandbox',
                    //'--display=:98', // Указываем дисплей Xvfb
                ]
            } : {})
        });
        //
        this.browser = browser;
        this.page = page;
        //
        this.page = await this.browser.newPage();
        //
        await this.page.setUserAgent('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36');
        //
        await (async () => { // Вставка плагинов для того что бы не паймали
            //
            await this.page.evaluateOnNewDocument((plugins) => {
                Object.defineProperty(navigator, 'plugins', {
                    get: () => plugins,
                });
            }, await (async (min_1, max_1, min_2, max_2) => {
                const randomText = (minLength, maxLength) => {
                    const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
                    let result = '';
                    let length = 0;
        
                    while (length < maxLength) {
                        const wordLength = Math.floor(Math.random() * 5) + 1;
                        const word = Array.from({ length: wordLength }, () => chars[Math.floor(Math.random() * chars.length)]).join('');
        
                        if (length + word.length > maxLength) break;
        
                        if (length > 0 && Math.random() > 0.5) {
                            result += ' ';
                            length++;
                        }
        
                        result += word;
                        length += word.length;
                    }
        
                    if (length < minLength) {
                        result += Array.from({ length: minLength - length }, () => chars[Math.floor(Math.random() * chars.length)]).join('');
                    }
        
                    return result.trim();
                }
                //
                var mass = [];
                //
                const rando = (Math.floor(Math.random() * (max_1 - min_1 + 1)) + min_1);
                //
                console.log('Плагинов: '+rando);
                //
                for(var n = 0; n < rando; n++) {
                    mass.push({
                        name: randomText(min_2, max_2),
                        description: randomText(min_2, max_2),
                    });
                }
                //
                return mass;
            })(10, 100, 10, 50));   // 524            
            //
            console.log('Изменгить')
        })();
        //
        await this.page.goto(this.save.url, { waitUntil: 'networkidle2', timeout: 0 });
        //
        await this.page.evaluate((text) => { // Скопировать текст с данными
            navigator.clipboard.writeText(text);
        }, text);
        //
        await (async () => { // Поставить фото
            const block = "div.flex.w-full.items-center > button > div > input";
            //
            await this.page.waitForSelector(block);
            //
            const input = await this.page.$(block); // Загрузить img
            //
            await img.forEachSync(async i => {
                await input.uploadFile(i); await wait(100);
            });
            //
        })();
        //
        await (async () => { // Вставить текст
            await wait(100);
            //
            await (await this.page.$("div.relative.w-full > textarea")).focus();
            //
            await wait(100);
            //
            await this.page.keyboard.down('Control');
            await this.page.keyboard.press('V');
            await this.page.keyboard.up('Control');
        })();
        //
        await wait(1000);
        //
        await (async () => { // Клик по кнопке
            await (await this.page.$("div.relative.w-full > div > div > div > div > button")).focus();
            await this.page.click("div.relative.w-full > div > div > div > div > button");
        })();
        //
        await (async () => { // Пройти капчу
            await this.page.waitForSelector(".p-4.backdrop-blur-sm > div"); // Ждать капчу  
            //
            await this.page.waitForSelector(".p-4.backdrop-blur-sm > div > div > div iframe");
            //
            console.log('CAPCHA 1');
            const iframe = await (await this.page.$(".p-4.backdrop-blur-sm > div > div > div iframe")).contentFrame();
            //
            await iframe.waitForSelector("div.label-container");
            //
            await wait(1000);
            //
            console.log('CAPCHA 2')
            const element = await this.page.$(".p-4.backdrop-blur-sm > div > div > div iframe"); // Замените 'селектор' на нужный селектор
            const b = await element.boundingBox();
            //
            await this.page.mouse.move(b.x+20, b.y+(b.height/2)+1.11);
            await this.page.mouse.click(b.x+20, b.y+(b.height/2)+1.11);
            //
            console.log('CAPCHA 3');
            //
            await wait(5000);
            //
            await this.page.waitForFunction((iframe) => {
                const element = document.querySelector(iframe);
                return !element;
            }, { timeout: 5000 }, ".p-4.backdrop-blur-sm > div > div > div iframe");
        })();
        //
        await (async () => { // Ждать ответа
            while(true) { // Ждать ответа, если что нажимаю на кнопку
                try {
                    await this.page.waitForSelector("div.inline-flex.flex-1.flex-col.items-start.gap-y-3 > div.flex.items-center.gap-3 > button", { timeout: 2500 });
                    //
                    break;
                } catch (error) {
                    await this.page.click("div.relative.w-full > div > div > div > div > button"); // Нажать на кнопку
                }
            }
            //
            await this.page.waitForSelector(".items-center.break-words > div");
        })();
        //
        await wait(1000);
        //
        const content = await this.page.evaluate((block) => { // Получить textContent
            return document.querySelector(block).textContent;
        }, ".items-center.break-words > div");
        //
        console.log(content);
    },
    //
    close: async function() {try {await this.browser.close();} catch (error) {}}
}).start('Напиши промпт фото', [__dirname+'/_.jpg']);

Я сделал скрипт который парсит с помощью puppeteer-real-browser сайт и пишет запрос на бесплатную GPT. Там есть hCAPCHA первой сложности, которую я легко обхожу.

Так вот проблема что когда я запускаю такой скрипт на ubuntu облачном сервере, то hCAPCHA переводится на второй уровень сложности, где не пройти просто так по клику, я использую Xvfb для графического интерфейса, а браузер у меня google chrome.

Почему сайт перевидит капчу на вторую сложность? Возможно проблема в линуксе, то поставив userAgent ничего не поменялось.

Если вы не сталкивались с таким, то скажите ваши предположения почему такое могло произойти, и как мне нужно гуглить что бы узнать хоть что то про это.


Ответы (0 шт):