Roman
Вроде понял
Roman
спс
Cenator 🐈
Лучше в page.evulate делать.. в контексте браузера
Контекста нет Если на них кликнуть нужно, например, то не лучше
Roman
не, кликать не надо все уже сделал , ну hover надо было сделать и не вышло апхапх ну и ладно
Roman
Roman
Ну я потратил где-то 30 мин , маус не пробывал
Андрей
Привет, Ребят, Подскажите, пожалуйста: В браузере по данному адресу перехожу, получаю ожидаемый JSON http://127.0.0.1:4004/dicts/measures С localhost:3012 Кидаю запрос: axios.get(http://127.0.0.1:4004/dicts/measures) Ловлю в логах: connect ECONNREFUSED 127.0.0.1:4004
Alexander
Привет, подскажите что почитать про то как организовать проект на puppeteer, вроде реализую пейдж обжект, выношу переменные, есть конфиг и хелперы, но чувствую что как-то не оптимально.
John
Обычно я делаю вообще все в одном файле, потом выношу функции в отдельные файлы.. не могу себя приучить делать сразу правильно, приходится рефакторить постоянно
Gambit501
Всем привет, кто в теме объясните пожалуйста, что в итоге будет с кукловодом? раз уже вроде как сам его разраб пилит playwright, может кто там форумы буржуйские читает или хз, может будет потом слияние, и кукловод станет playwright?
Pavel
В puppeteer работает 1 разраб, сейчас мигрирует на тайпскипт все, потом наверно начнет фичи пилить.
Pavel
Playwright запускается почти так же, апи немного другое и нужно выдавать права на каждый чих. Я нашел небольшую разницу в 3 примерах из 360 мой скрипт для пуппетера валится в playwright, но пока не понял где именно эта разница. В тепличном мини примере все ок.
Pavel
Это зависит все от CDP
Назар
А разве в puppeteer можно?
в папитир нельзя. Может в мозиле можно, я пока не проверял
Назар
А что за кейс у тебя?
бот для игры и там за рекламу можно плюшки получать.
Pavel
В cdp есть screencast, и ты можешь эмулировать его скриншотами.
Nikita
Господа. Такой вопрос. Как мне лучше поймать лоадинг скрин, который рандомно вылетает на странице, если сайт подвиснет? Пробовал вешать события, не работает. Работает только "page.on('request')" но криво, слишком много ложных срабатываний. Мне нужно как-то следить, появился лоадинг скрин или нет, и если да, то ждать пока не закроется
Alex*
День добрый! А c какими параметрами запустить puppeteer для идентификации процессов? Чтобы через ps различить запущенные проекты.
Gambit501
Это наверн должно помочь
Alex*
или тут поищи - https://peter.sh/experiments/chromium-command-line-switches/
Да, это то, что надо - параметры. Спасибо, посмотрю.
Alex
Есть разница в производительности открывать новую вкладку с новым контекстом и прокси, или новый браузер?
Alex
Точнее не так, понятное дело что есть, но на сколько она весомая ?
Horus
Ребят, доброе утро всем, никто не сталкивался с ошибкой "Must use import to load ES module" при работе с puppeteer? В проекте используется ТОЛЬКО он. Что странно: у меня и под линью и под виндой такой ошибки не возникает, но у работодателя проект не заводится и падает с этой ошибкой, require нигде не использую, только импорты
Horus
Разобрался — это ошибка ноды lts версии
Gambit501
Есть разница в производительности открывать новую вкладку с новым контекстом и прокси, или новый браузер?
Разницы особой думаю не будет, тут все зависит как ОС распределяет нагрузку и от проца самого
Gambit501
вот к примеру тект с хабра
Gambit501
Распараллеливайте браузеры, а не веб-страницы Итак, мы поняли, что браузер запускать нехорошо и нужно делать это только в случае крайней необходимости. Следующий совет — запускать только одну сессию на каждый браузер. Хотя в реальности можно и сэкономить ресурсы, распараллелив работу через pages, но если упадёт одна страница, она может повалить весь браузер. К тому же не гарантируется, что каждая страница идеально чистая (куки и хранение могут стать головной болью, как видим).
Gambit501
Каждый новый инстанс браузера получает чистый --user-data-dir (если не указано иное). То есть он полностью обрабатывается как свежая новая сессия. Если Chrome по какой-то причине упадёт, то не потянет с собой также и другие сессии.
Aleksandr
начал разбираться с headless. И наткнулся на такую проблему с установкой puppeteer:
Aleksandr
`` SyntaxError: Unexpected token { at createScript (vm.js:80:10) at Object.runInThisContext (vm.js:139:10) at Module._compile (module.js:617:28) at Object.Module._extensions..js (module.js:664:10) at Module.load (module.js:566:32) at tryModuleLoad (module.js:506:12) at Function.Module._load (module.js:498:3) at Function.Module.runMain (module.js:694:10) at startup (bootstrap_node.js:204:16) at bootstrap_node.js:625:3 npm WARN notsup Unsupported engine for puppeteer@3.1.0: wanted: {"node":">=10.18.1"} (current: {"node":"8.17.0","npm":"6.13.4"}) npm WARN notsup Not compatible with your version of node/npm: puppeteer@3.1.0 npm WARN edsc@1.0.0 No repository field. npm ERR! code ELIFECYCLE npm ERR! errno 1 npm ERR! puppeteer@3.1.0 install: node install.js npm ERR! Exit status 1 npm ERR! npm ERR! Failed at the puppeteer@3.1.0 install script. npm ERR! This is probably not a problem with npm. There is likely additional logging output above. npm ERR! A complete log of this run can be found in: npm ERR! /home/alex/.npm/_logs/2020-05-24T18_50_55_442Z-debug.log ``
Aleksandr
а при запуске примера по сохранению pdf Error: Cannot find module 'puppeteer' at Function.Module._resolveFilename (module.js:548:15) at Function.Module._load (module.js:475:25) at Module.require (module.js:597:17) at require (internal/module.js:11:18) at Object.<anonymous> (/home/alex/domen/edsc/index.js:1:81) at Module._compile (module.js:653:30) at Object.Module._extensions..js (module.js:664:10) at Module.load (module.js:566:32) at tryModuleLoad (module.js:506:12) at Function.Module._load (module.js:498:3)
John
Ты прописал зависимость модуля?
John
const puppeteer = require('puppeteer')
Aleksandr
первой строкой
John
А установил? Если не работает попробуй поставить версию постарше npm i puppeteer@2.1.0
John
Не глянул даже.. в ошибках все пишется, главное читать:(
Aleksandr
А установил? Если не работает попробуй поставить версию постарше npm i puppeteer@2.1.0
Сработало! Спасибо! Mr. Nobody с установкой node тоже помучался node 12.16.3
Aleksandr
Усп v8.17.0
Aleksandr
Еще раз спасибо!
Ислам
Всем добрый вечер, я как понял, в пупетире до сих пор нет универсального способа захендлить новую вкладку?
Ислам
https://github.com/puppeteer/puppeteer/issues/3718
Ислам
люди предлагают много чего, но у меня кейс заключается в том, что клик по кнопке делает запрос на редирект в новой вкладке
Ислам
когда не в безголовом режиме то все окей, новая страница получает редирект и переходит
Ислам
а в безголовом все перестает работать
Nikita
У меня вот такой вопрос. Как лучше и корректнее прописать ожидание ответа на запрос? Ну что-то вроде: page.on('request', async(req)=>{ if(req.resourceType()==='xhr'){ await page.waitForResponse(req); } });
Nikita
Что бы скрипт ждал ответ каждый раз, когда уходит запрос типа 'xhr'
Nikita
В гугле походу забанили, не нашёл примеров подобных
Ислам
https://pastebin.com/rRZDY1Vn Вот такой штукой не пробовал?
Да, я так и получаю страницу но покопавшись обнаружил, что в безголовом режиме происходит ssl ошибка, из-за того что не отправляю сертификат, в других запросах всегда отправляю просто через page.on('request') перехватываю и добавляю agentOptions. А вот запрос из новой вкладки не так просто перехватить и корректно отправить. Уже давно есть тикет: https://github.com/puppeteer/puppeteer/issues/3667
Ислам
Кстати в Playwright эта проблема уже решена, так что придется по тихоньку на него валить
Ислам
Это только в безголовом такая проблема?
ага, там с выбором pxf сертификатов такие костыли с интерсепторами
Nikita
:С грустно :С
Ислам
когда headless false хром просит выбрать сертификат и летит дальше
Nikita
Вопрос. Сколько может жить соединение по веб сокету? через Puppeteer.connect. У меня при запуске сервера puppeteer сразу цепляется к сокету. И при запросе в браузере создается новая вкладка и в ней начинается работа. Проблема в том, что через 30 минут начинают сыпаться ошибки page.crashed при попытке прогрузить страницу. и чем дальше, тем хуже. Чем дольше работает, чем больше запросов, тем чаще сыпятся ошибки. Может быть проблема в коннекте? Что-то вроде забития памяти при синглтон подключении?
Nikita
Что бы скрипт ждал ответ каждый раз, когда уходит запрос типа 'xhr'
И да. Я вчера это решил https://pastebin.com/9qJZHQps Может кому пригодится.
John
https://www.npmjs.com/package/pending-xhr-puppeteer
Nikita
Возможно плагин стабильнее работать будет. Нужно тестить :)
Aleksandr
Ребят, пытался дату поменять в лоб. Не дает! а как поменять значение селектора не соображу! Дайте наводку!
Nikita
Ребят, пытался дату поменять в лоб. Не дает! а как поменять значение селектора не соображу! Дайте наводку!
От сайта зависит. Иногда работает await page.evaluate(()=>{document.querySelector('Selector').value=20.10.2019}) Но чаще всего надо сначала кликнуть по полю ввода даты, а потом ввести туда значение
Ислам
Это jQuery Datepicker, можно js код на странице выполнить и использовать селектор jquery.
Aleksandr
Пытался. Он и на странице не даёт ввести только через выбор месяца и конкретной даты формы ввода.
Ислам
Aleksandr
Jquery не знаю. В моём распоряжении нативный js на начальном уровне и туториал по кукловоду.
Ислам
сам код можно выполнить через page.evaluate(()=>{ ... }
Aleksandr
Как раз этим сейчас и занимаюсь. Как поставить паузу для просмотра выполнения кода в режиме отображения?
Ислам
waitFor?
Ислам
есть еще это, но сам не пользовался