AngryBunny
но могу ошибаться
AngryBunny
waitForselector тоже должне работать
Alex
если я хочу удостовериться что все элементы которые мне нужны прогружены, достаточно будет написать waitForselector самого нижнего элемента ?
Нет, элементы могут прогружатся вразнобой. Тут нужно ждать всех элементов которые тебе важны
Nuruddin
Нет, элементы могут прогружатся вразнобой. Тут нужно ждать всех элементов которые тебе важны
а нет в этой либе команды типа waitForAllContent , или надо promise.all прописывать ?
CybernatiC
Ребят всем привет! МОжно ли запустить Puppeteer и сделать парсер на сервере? Например на Centos
CybernatiC
Alex
а нет в этой либе команды типа waitForAllContent , или надо promise.all прописывать ?
А как ты можешь знать когда контент all ? :) Боюсь с современными SPA приложениями это определить невозможно
AngryBunny
Народ всем привет такой вопрос: Нужно брать URL тестируемого сайта в определенном месте и дописывать в него определенное значение. Как это организовать? Думал попробовать с помощью interceptor но может кто - то уже делал подобное и сможет объяснить
Unknown
что значит брать юрл в определнном месте и дописывать в него определенные значение? нужно делать какие-то изменения в самом урле? Если да, то вот: https://nodejs.org/dist/latest-v14.x/docs/api/url.html
AngryBunny
Да да именно
Unknown
ну и сам урл берется вот так (текущей страницы) https://github.com/puppeteer/puppeteer/blob/v9.1.1/docs/api.md#pageurl
AngryBunny
Т.е. я захожу на страницу определенную и мне нужно к существующему URL дописать параметр чтобы открылось меню
Anna
Всем привет 👋 И спасите, помогите) Как только добавляю в тест `waitForNavigation` или `waitForSelector` сразу прилетает ошибка `Error: Protocol error (Runtime.callFunctionOn): Target closed.` Пробовала прописывать `--shm-size=3gb` или `--shm-size=1gb`, даже где-то нашла, что нужно добавить `--disable-dev-shm-usage`, не помогло((( 😪
Anton
Добрый день, коллеги! У кого-нибудь есть опыт работы с большими объемами парсинга на puppeteer? Когда за несколько часов надо обработать несколько десятков тысяч страниц разных сайтов.
Anton
Надо как-то сильно распараллелиться. При попытке решения "в лоб" - открытии нескольких вкладок и их параллельной работе - опытным путем установлено, что больше 4-5 вкладок не дают прироста производительности. Страницы начинют тормозить и медленнее открываться. В зависимости от сайта получается обрабатывать 1 страницу за 1-3 секунды где-то. Как бы повысить скорость на порядок? В каком направлении копать? Есть puppeteer-cluster, он эффективнее открытия нескольких вкладок работает, кто-нибудь пробовал? Или переезд в облако может помочь?
Alhimik
Добрый день, коллеги! У кого-нибудь есть опыт работы с большими объемами парсинга на puppeteer? Когда за несколько часов надо обработать несколько десятков тысяч страниц разных сайтов.
Но вообще не выглядят сильно сложной задача с такими цифрами. 10000 страниц за 3600 секунд это по 2.7 секунд на страницу. Я думаю даже на одной средней машине такого можно добиться. Тут конечно смотря что за сайты.
Anton
А какой из подходов лучше: несколько вкладок или puppeteer-cluster, есть мысли?
Alhimik
Ну уже сложнее, да. Можно взять сервера с почасовой оплатой и распарралелить. Там копейки это будет стоить.
Alhimik
А какой из подходов лучше: несколько вкладок или puppeteer-cluster, есть мысли?
Не знаю, мне кажется нет смысла во вкладках что-то делать, так как изначально браузер не заточен под параллельную работу пользователя в нескольких вкладках. Так что предположу что это тяжелее может быть. Выигрыш только по оперативной памяти у подхода с вкладками.
Anton
Ясно, спасибо, буду пробовать!
Anton
Скриншоты надо делать, плюс многие сайты блочат, на паппетире легче блоки обходить
Anton
Какие альтернативные варианты можете предложить?
Anton
сбор инфы + скрин, они равнозначны
Alhimik
Какие альтернативные варианты можете предложить?
Тогда никаких похоже. С этого и надо было начинать.
Andrey
ну да
Andrey
парсинг != скриншот :)
Anton
скрейпинг более уместный термин?)
Alhimik
Да и вообще если настолько много сайтов, то скорей всего нужен именно браузер. Так как структура у каждого своя, так проще. Иначе придётся вообще с каждым сайтом детально разбираться, особенно если там SPA.
Andrey
суть в том, что нужен ли браузер, парсинг можно сделать и на request, и на cheerio
Anton
суть в том, что нужен ли браузер, парсинг можно сделать и на request, и на cheerio
Это понятно, но скрины нужны и cheerio блочат часто. Puppeteer-stealth сильно помогает с этим. Возможно, есть еще какие-то варианты?
Alhimik
Регулярная. Разовую подождали бы пару суток.
Берёшь штук 5 (зависит уже от задачи, может и 2-3 хватит) серверов самых дешёвых (100-150 рублей в месяц) 1 ядро, 1 Гб оперативки (этого без проблем хватает на один браузер) и параллелишь на них.
Alhimik
Если нужно реже, может почасовая оплата дешевле будет.
Alhimik
Сейчас пока так и делаем, но объемы постоянно растут, поэтому ищу кардинальный способ увеличить скорость на порядок)
Я не думаю что даже в два раза получится ускорить, о порядке тут и речи не может быть. 🤷🏻‍♂️
Alhimik
Каталог с профилем имеется ввиду.
Anton
Кэширование используется?
нет, не используется
Andrey
Сколько сайтов, порядок?
Anton
Каталог с профилем имеется ввиду.
тяжелые скрипты с сайта позволит кэшировать?
Anton
Сколько сайтов, порядок?
пока порядка сотни
Alhimik
тяжелые скрипты с сайта позволит кэшировать?
Можно сэкономить на загрузке по сети (трафик) и по времени. Но в размен на место на винте.
Alhimik
Скрипты-то ладно, там обычная статика наверное отнимает большую часть. Это лучше посмотреть уже в консоли браузера.
Alhimik
Alhimik
Alhimik
Вот для примера открытие главной страницы хабра. Первый раз и второй (уже с кэшем).
Anton
в 3+ раза прирост, это здорово!
Alhimik
8.3 Мб и 6 секунд против 193 Кб и 1.36 секунды.
Alhimik
В 4 почти.
Anton
место только под статику нужно, получается?
Alhimik
а сколько места надо? от чего зависит объем?
Не знаю, проверь на своих сайтах.
Alhimik
место только под статику нужно, получается?
Под профиль браузера, а сколько на кэш выделить это уже от настроек зависит.
Alhimik
-disk-cache-size
Alhimik
Если место позволяет выделяешь больше. Так как сайтов много. Иначе вымываться будет.
Anton
через этот плагин подключается https://www.npmjs.com/package/puppeteer-extra-plugin-user-data-dir ?
Alhimik
через этот плагин подключается https://www.npmjs.com/package/puppeteer-extra-plugin-user-data-dir ?
Зачем плагин? Это в опциях запуска указывается всё.
Anton
а, даже так, спасибо, попробую
Alhimik
а, даже так, спасибо, попробую
https://pptr.dev/#?product=Puppeteer&version=v9.1.1&show=api-puppeteerlaunchoptions userDataDir
Anton
благодарю 👍
E
как узнать ширину экрана? доку посмотрел, не смог найти
Назар
как узнать ширину экрана? доку посмотрел, не смог найти
можно взять window. offsetWidth наверное в evaluate.
E
вот мне нужно как-то это в переменной сохранить
E
возвращает пока undefined
Назар
так просто return сделай
Назар
width = await page.evaluate(() => window.screen.width);
E
сработало, спасибо
Anna
Код покажи. Дело не в опциях скорей всего. Похоже что у тебя страница закрывается до того как ты пытаешься на ней что-то искать.
Сори, пока думала как бы компактнее показать код, перелопатили половину кода) будет смотреть, повторится ли ошибка. А пока такой вопрос, подскажите, есть ли какие-то курсы по папитиру? А то вообще ничего не могу нарыть полезного и познавательного.