AWS Lambda + Puppeteer + CloudflareJavascript

Форум по Javascript
Ответить
Anonymous
 AWS Lambda + Puppeteer + Cloudflare

Сообщение Anonymous »

Я работаю с AWS Lambda и Puppeteer, который поставляется с собственными проблемами против работы на местном уровне с кукловом. Я иногда использую 2Captcha Services, и это показывает, что они обладают способностями решать облачный флюр, что именно мне нужно. Однако, используя решение, которое они предоставляют здесь https://github.com/2captcha/cloudflare-demo и адаптируя кукольник для AWS Lambda, страница CloudFlare, кажется, находится в бесконечной цикле решенного Локально и с кукловодом без головы, он работает просто отлично. Кажется, я не могу точно определить, что заставляет его не работать в AWS Lambda. Вот текущий код, который я пытаюсь запустить, без успеха. Я также попробовал прокси в случае, если это вызывает проблемы, и это тоже не помогло. < /P>
import chromium from '@sparticuz/chromium';
import { Solver } from '2captcha-ts';
import puppeteerExtra from 'puppeteer-extra';
import pluginStealth from 'puppeteer-extra-plugin-stealth';

export async function handler() {
const viewport = {
deviceScaleFactor: 1,
hasTouch: false,
height: 1080,
isLandscape: true,
isMobile: false,
width: 1920
};

const puppeteerExtraDefault = puppeteerExtra.default;
puppeteerExtraDefault.use(pluginStealth());

const args = chromium.args;
const browser = await puppeteerExtraDefault
.launch({
args: args,
defaultViewport: viewport,
executablePath: await chromium.executablePath(),
headless: 'shell'
});
console.log('browser loaded');
const [page] = await browser.pages();
page.on('console', (msg) => {
console.log('[PAGE LOG]', msg.text());
});

await page.evaluateOnNewDocument(`
console.log('Script being injected');
console.clear = () => console.log('Console was cleared')
const i = setInterval(() => {
if (window.turnstile) {
clearInterval(i)
window.turnstile.render = (a, b) => {
let params = {
sitekey: b.sitekey,
pageurl: window.location.href,
data: b.cData,
pagedata: b.chlPageData,
action: b.action,
userAgent: navigator.userAgent,
json: 1
}
// we will intercept the message in puppeeter
console.log('intercepted-params:' + JSON.stringify(params))
window.cfCallback = b.callback
return
}
}
}, 50)
`);

await page.setUserAgent(
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36'
);
const userAgent = await page.evaluate(() => navigator.userAgent);
console.log('Current user agent:', userAgent);

const solver = new Solver('my2CaptchaKey'); // For secrecy
page.on('console', async (msg) => {
const txt = msg.text()
if (txt.includes('intercepted-params:')) {
const params = JSON.parse(txt.replace('intercepted-params:', ''))
console.log(params)

try {
console.log(`Solving the captcha...`)
const res = await solver.cloudflareTurnstile(params)
console.log(`Solved the captcha ${res.id}`)
console.log(res)
await page.evaluate((token) => {
// @ts-ignore
cfCallback(token)
}, res.data)
} catch (e) {
console.log(e.err)
return process.exit()
}
} else {
return;
}
})

// 2 captchas own demo page
await page.goto('https://2captcha.com/demo/cloudflare-tu ... -challenge')
// Wait for a total of 45 seconds for the page to load and the cloudflare to be solved
try {
await page.waitForSelector('#root > div._layout_1smur_1', { timeout: 45000 });

} catch (e) {
console.error('Error waiting for the page to load:', e);
await browser.close();
return;
}

console.log('Page loaded successfully');
await browser.close();
return '';
}


Подробнее здесь: https://stackoverflow.com/questions/797 ... cloudflare
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»