AngryBunny
но могу ошибаться
AngryBunny
waitForselector тоже должне работать
Alex
Nuruddin
CybernatiC
Ребят всем привет!
МОжно ли запустить Puppeteer и сделать парсер на сервере?
Например на Centos
CybernatiC
AngryBunny
Народ всем привет такой вопрос: Нужно брать URL тестируемого сайта в определенном месте и дописывать в него определенное значение. Как это организовать? Думал попробовать с помощью interceptor но может кто - то уже делал подобное и сможет объяснить
Alex
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 дописать параметр чтобы открылось меню
Alhimik
Anna
Всем привет 👋 И спасите, помогите) Как только добавляю в тест `waitForNavigation` или `waitForSelector` сразу прилетает ошибка `Error: Protocol error (Runtime.callFunctionOn): Target closed.`
Пробовала прописывать `--shm-size=3gb` или `--shm-size=1gb`, даже где-то нашла, что нужно добавить `--disable-dev-shm-usage`, не помогло(((
😪
Alhimik
Anton
Добрый день, коллеги!
У кого-нибудь есть опыт работы с большими объемами парсинга на puppeteer? Когда за несколько часов надо обработать несколько десятков тысяч страниц разных сайтов.
Anton
Надо как-то сильно распараллелиться. При попытке решения "в лоб" - открытии нескольких вкладок и их параллельной работе - опытным путем установлено, что больше 4-5 вкладок не дают прироста производительности. Страницы начинют тормозить и медленнее открываться. В зависимости от сайта получается обрабатывать 1 страницу за 1-3 секунды где-то. Как бы повысить скорость на порядок? В каком направлении копать?
Есть puppeteer-cluster, он эффективнее открытия нескольких вкладок работает, кто-нибудь пробовал? Или переезд в облако может помочь?
Alhimik
Anton
Alhimik
Anton
А какой из подходов лучше: несколько вкладок или puppeteer-cluster, есть мысли?
Alhimik
Ну уже сложнее, да. Можно взять сервера с почасовой оплатой и распарралелить. Там копейки это будет стоить.
Anton
Ясно, спасибо, буду пробовать!
Andrey
Anton
Скриншоты надо делать, плюс многие сайты блочат, на паппетире легче блоки обходить
Anton
Какие альтернативные варианты можете предложить?
Alhimik
Anton
сбор инфы + скрин, они равнозначны
Andrey
ну да
Andrey
парсинг != скриншот :)
Anton
скрейпинг более уместный термин?)
Alhimik
Да и вообще если настолько много сайтов, то скорей всего нужен именно браузер. Так как структура у каждого своя, так проще. Иначе придётся вообще с каждым сайтом детально разбираться, особенно если там SPA.
Andrey
суть в том, что нужен ли браузер, парсинг можно сделать и на request, и на cheerio
Alhimik
Anton
Alhimik
Alhimik
Регулярная. Разовую подождали бы пару суток.
Берёшь штук 5 (зависит уже от задачи, может и 2-3 хватит) серверов самых дешёвых (100-150 рублей в месяц) 1 ядро, 1 Гб оперативки (этого без проблем хватает на один браузер) и параллелишь на них.
Alhimik
Если нужно реже, может почасовая оплата дешевле будет.
Anton
Alhimik
Alhimik
Alhimik
Каталог с профилем имеется ввиду.
Anton
Andrey
Сколько сайтов, порядок?
Anton
Anton
Alhimik
Скрипты-то ладно, там обычная статика наверное отнимает большую часть. Это лучше посмотреть уже в консоли браузера.
Anton
Alhimik
Alhimik
Alhimik
Вот для примера открытие главной страницы хабра. Первый раз и второй (уже с кэшем).
Anton
в 3+ раза прирост, это здорово!
Alhimik
8.3 Мб и 6 секунд против 193 Кб и 1.36 секунды.
Alhimik
В 4 почти.
Anton
место только под статику нужно, получается?
Alhimik
Alhimik
-disk-cache-size
Alhimik
Если место позволяет выделяешь больше. Так как сайтов много. Иначе вымываться будет.
Anton
через этот плагин подключается https://www.npmjs.com/package/puppeteer-extra-plugin-user-data-dir ?
Alhimik
Anton
а, даже так, спасибо, попробую
Anton
благодарю 👍
E
как узнать ширину экрана? доку посмотрел, не смог найти
Назар
E
E
вот мне нужно как-то это в переменной сохранить
E
возвращает пока undefined
Назар
Назар
width = await page.evaluate(() => window.screen.width);
E
сработало, спасибо