Slava
Я как-то неправильно пользуюсь fs.readFileSync, а правильно не умею
Slava
внутри evaluate нахидиться функция, которая исполниться внутри браузера, а не ноды. Соотвественно там нет fs
я примерно то же самое и нагуглил, но мне это ни о чем не говорит, мне бы гораздо более помог пример того, как именно это все нужно сформулировать чтобы оно работало
Назар
можно как-то перенести fs внутрь evaluate?
зачем? Легче вернуть картинку сразу оттуда.
Slava
зачем? Легче вернуть картинку сразу оттуда.
я бы с удовольствием так и сделал, но я не понимаю как именно это нужно реализовать
Назар
Slava
надо ее как-то вот так вот (из доков антикаптчи) const captcha = fs.readFileSync('captcha.png', { encoding: 'base64' }); получить и отправить антикаптче а у меня только url от vk в виде каком-то вот таком https://api.vk.com/captcha.php?sid=708211490671
Slava
https://stackoverflow.com/questions/57570538/how-do-i-return-a-value-from-page-evaluate-in-puppeteer
так подойдет: const captcha = () => { return tab.evaluate(async () => { return await new Promise(resolve => { // <-- return the data to node.js from browser fs.readFileSync(captchaUrl, {encoding: 'base64'}); })) }) };
Назар
нет
Назар
оттуда нужно просто вернуть картинку, можно даже юрл
Slava
я не разбираюсь, вы не могли бы мне помочь готовым решением?
Назар
потом уже использовать fs
Slava
оттуда нужно просто вернуть картинку, можно даже юрл
можно на примере, пожалуйста, мне объяснить неразумному?
Назар
Назар
и потом fs.readFileSync(url)
Назар
но вообще, я думаю что тебе не нужен evaluate вообще
Bogdan
+
Slava
но вообще, я думаю что тебе не нужен evaluate вообще
url это src let elem = document.querySelector('img.vkc__Captcha__image'); let result = elem.src; return result;
Slava
подойдет вот так вот: const url = await tab.evaluate(async () => { return await new Promise(resolve => { // <-- return the data to node.js from browser let elem = document.querySelector('img.vkc__Captcha__image'); let result = elem.src; return result; }); });
Slava
вроде должно работать
спасибо, я сейчас попробую
Назар
но вообще вот. https://stackoverflow.com/questions/55096461/get-image-src-with-specific-class-in-puppeteer
Назар
хотя здесь тоже евал. Только последний ответ с 0 очков нативный)
Slava
юрл вроде бы нормально брался по карйней мере в консоль что-то вменяемое выплевывалось
1
можно на примере, пожалуйста, мне объяснить неразумному?
Как вариант сделать скриншот капчи const sel = '#captchaImage'; const selCaptcha = await page.$(sel); const rect = await page.evaluate((header) => { const {top, left, bottom, right} = header.getBoundingClientRect(); return {top, left}; }, selCaptcha); const base64 = await selCaptcha.screenshot({ path: captchaFile, clip: {x: rect.left, y: rect.top, width: 150, height: 50}, encoding: 'base64'}); const captcha = {text: await ac.solveImage(base64, true)}; console.log('Captcha: ' + captcha.text);
Slava
хотя что я могу думать
Slava
оно почему-то зависло: const captchaUrl = await tab.evaluate(async () => { return await new Promise(resolve => { // <-- return the data to node.js from browser let elem = document.querySelector('img.vkc__Captcha__image'); let result = elem.src; return result; }); }); console.log(captchaUrl); const captcha = fs.readFileSync(captchaUrl);
Slava
видимо, надо научиться читать мысли уважаемых знатоков
Slava
ну вот что говорит fs.readFileSync Error: ENOENT: no such file or directory, open 'https://api.vk.com/captcha.php?sid=729974601402'
Slava
const captchaUrl = await tab.evaluate(() => { let elem = document.querySelector('img.vkc__Captcha__image'); let result = elem.src; return result; }); console.log(captchaUrl); console.log(captchaUrl); const captcha = fs.readFileSync(captchaUrl);
Slava
как-то так
Slava
Скриншот капчи делать
я так и попробую сделать только сохранить ее через fileSave
Slava
fs.writeFile
Slava
то есть перепутал
1
я так и попробую сделать только сохранить ее через fileSave
Картинка тут сохраняется, вместо captchaFile указать свой файл. const base64 = await selCaptcha.screenshot({ path: captchaFile, clip: {x: rect.left, y: rect.top, width: 150, height: 50}, encoding: 'base64'});
Slava
Картинка тут сохраняется, вместо captchaFile указать свой файл. const base64 = await selCaptcha.screenshot({ path: captchaFile, clip: {x: rect.left, y: rect.top, width: 150, height: 50}, encoding: 'base64'});
похожим образом и сделал, файл нормально сохраняется, ~2.5kb, но при попытке прочитать его через fs.readFileSync и скормить API сервиса, появляется ошибка "Received API error ERROR_ZERO_CAPTCHA_FILESIZE: The size of the captcha you are uploading is less than 100 bytes"
Slava
https://pastebin.com/0sCtkavc
Slava
Slava
надо тогда попробовать
WEB
Коллеги, скиньте ссылку на проверку дитектов, а то потерял. Спасибо
Британец
Привет, такая проблема. Когда запускаю браузер у меня открывается сразу страница расширения там нужно ввести api ключ, Как я эту вкладку могу использовать ?
Британец
Не понимаю как к ней обратиться
Kathy
Подскажите как лучше вот такие конструкции "обезвреживать"? Мне нужно убрать ссылку на источик сделав этот выделенный текст обычным.
Slava
Подскажите как лучше вот такие конструкции "обезвреживать"? Мне нужно убрать ссылку на источик сделав этот выделенный текст обычным.
На javascript? https://code-boxx.com/get-set-remove-href-javascript/#:~:text=1D)%20REMOVE%20HREF&text=We%20can%20remove%20the%20href,Or%20removing%20it%20entirely%20%E2%80%93%20ELEMENT.
Alex
можно и там можно управлять, но нужно обязательно на странице сайта что бы открывалось, расширение берет данные со страницы
Slava
Актуально, может кто знает это вообще реально или нет?
Боюсь, что у меня недостаточно знаний по этому вопросу...
Slava
А мне тоже снова требуется помощь... У меня есть эта функция, которая решает каптчу в ВК силами API сервиса anti-captcha.com. У нее в самом начала проверка условия, есть ли на странице каптча вообще. Конечно, мне бы хотелось вместо того, чтобы запускать эту функцию с ее "проверкой" после каждой отдельной инструкции, как-то иметь ее работающей фоном. Если каптча появится, чтобы она вызывалась... Но я не умею программировать...
Slava
Можно как-то сделать это? Я боюсь неправильно сформулировать... Асинхронность, многопоточность... Фоновое ожидание события...
George
Кто-то знает как можно исполнить код js в консоли chrome devtools и получить результат с помощью puppeteer?
Bogdan
Кто-то знает как можно исполнить код js в консоли chrome devtools и получить результат с помощью puppeteer?
Что ты имеешь под «получить результат с помощью puppeteer”? Тебе там нужно JS запустить или все же скрипт puppeteer?
George
Мне нужно что бы как-то скриптом можно было запустить код в консоли devtools
Bogdan
Щас попробую найти
George
Мне нужно что бы я смог открыть сайт, сделать на нем что-то, а потом выполнить скрипт в консоли devtools
Bogdan
https://chrome.google.com/webstore/detail/puppeteer-ide/ilehdekjacappgghkgmmlbhgbnlkgoid
George
это же просто ide
George
puppeteer так же будет выполнять js как скрипт сайта, а не как из под консоли devtools
Slava
Я думаю нужно базу выучить программирования или нанять программиста. А то хз как объяснить.
Чтобы функция ожидала событие, при котором бы она срабатывала. У меня несложные скрипты для puppeteer на вк (боты). Иногда там возникает каптча. Сейчас я ничего лучшего не придумал, чем запускать функцию после каждой инструкции (таких, как "кликнуть/заполнить/подождать селектор"). Функцию, которая проверяет, не вылезла ли каптча, и если вылезла, решает ее. Сейчас так, но я догадываюсь, что есть и лучший способ.
Slava
Вот эта функция https://pastebin.com/AbAazRLA
Slava
может быть...
Bogdan
Не знаю...
Не надо исправлять то что работает. Если работает то значит все ок, когда перестанет работать, тогда нужно решать.
Slava
В одном файле джаваскрипта
Bogdan
В одном файле джаваскрипта
Так ещё раз в чем проблема? Ты не знаешь в какой момент исполнения скрипта вылезет капча?