Отличие 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 ничего не поменялось.
Если вы не сталкивались с таким, то скажите ваши предположения почему такое могло произойти, и как мне нужно гуглить что бы узнать хоть что то про это.