Alexander
может await page.waitFor('*') добавить
Alexander
вообще надо дождаться когда там отработают все скрипты
Alexander
это же после 'load'
Alexander
и даже после waitFor('*')
1
Но это же не выход.. сайт тормознет и будет 4 секунды нужная пауза
Оказывается, дело не в паузе, а щелкает по элементу при условии, что мышкой прокрутишь страницу. Пробовал await page.$eval('#app_date', (el) => el.scrollIntoView()) не помогает. Почему-то только когда мышкой вручную прокрутишь только тогда нажимает.
Alexander
а так? await page.$eval(selectorStr, elem => elem.click());
Alexander
или если await page.hover('#app_date')
Alexander
Тот чел, который исправит эту постоянную еблю с этими всеми waitами и кликами должен получить нобелевскую премию мира.
1
или если await page.hover('#app_date')
Ни один из вариантов не сработал
Alexander
Ни один из вариантов не сработал
ну сначала hover а потом click
Alexander
Ни один из вариантов не сработал
а так page.focus(selector) ? а потом клик
1
ну сначала hover а потом click
Попробовал, не срабатывает
1
а так page.focus(selector) ? а потом клик
Эта связка отлично работает 👍, спасибо await page.focus(selector) await page.$eval(selector, elem => elem.click());
Андрей К.
Здравствуйте Нужен человек для написания e2e тестов на jest и puppeteer Не подскажите, где искать?
Андрей К.
на хэхэ ру
По тэгу "Puppeteer" найдено одно более-менее подходящее резюме, и вряд ли этот человек пойдет на фриланс
Alex*
День добрый. Чисто практический вопрос. Насколько эффективнее использовать локальный диспетчер прокси ( на уровне ОС ) не загружая этой задачей сам headless браузер. Парсер например не будет знать, что он работает через прокси.
Alex*
примеры такого использования есть? в теории думаю это не плохо
Все платные прокси предлагающие прокси услуги так работают. Значит есть. ) просто это разворачивается у себя на своем сервере.
John
не, я о другом немного, обычно прокси нужно для массового чего нибудь, после каждого успешного выполнения, нужно менять ip и отрабатывать еще puppeteer. тут сразу два момента: будет невозможно делать параллельно как прокси программа на пк узнает что кукловод отработал, а тут значит уже руками надо
John
Я думаю все можно настроить. По сути сделать свой прокси, с различными сценариями.
настроить можно вообще всё) другое дело в ресурсах, времени и знаниях
Alex*
А какую версию puppeteer используют вод Win 7 и Win 10 Под Linux все ок. Но на Win валится
Alex*
at onClose (Z:\sheetform\node_modules\puppeteer\lib\Launcher.js:750:14) at ChildProcess.<anonymous> (Z:\sheetform\node_modules\puppeteer\lib\Launcher.js:740:61) at ChildProcess.emit (events.js:326:22) at Process.ChildProcess._handle.onexit (internal/child_process.js:275:12) Failed to launch the browser process! [1027/182007.508:FATAL:feature_list.cc(282)] Check failed: !g_initialized_from_accessor. Backtrace: CrashForExceptionInNonABICompliantCodeRange [0x000007FECB53EDE2+9435986] CrashForExceptionInNonABICompliantCodeRange [0x000007FECB4C10F2+8920674] CrashForExceptionInNonABICompliantCodeRange [0x000007FECB4CD783+8971507] CrashForExceptionInNonABICompliantCodeRange [0x000007FECB4C3066+8928726] ovly_debug_event [0x000007FECA181496+14152246] CrashForExceptionInNonABICompliantCodeRange [0x000007FECB437B4E+8358078] CrashForExceptionInNonABICompliantCodeRange [0x000007FECB437AC7+8357943] CrashForExceptionInNonABICompliantCodeRange [0x000007FECB465698+8545288] CrashForExceptionInNonABICompliantCodeRange [0x000007FECB437186+8355574] CrashForExceptionInNonABICompliantCodeRange [0x000007FECB464B51+8542401] CrashForExceptionInNonABICompliantCodeRange [0x000007FECB464A29+8542105] CrashForExceptionInNonABICompliantCodeRange [0x000007FECB464860+8541648] ChromeMain [0x000007FEC94011B6+286] Ordinal0 [0x000000013F2A27A7+10151] Ordinal0 [0x000000013F2A1875+6261] GetHandleVerifier [0x000000013F3AA3C2+705138] BaseThreadInitThunk [0x00000000779D59ED+13] RtlUserThreadStart [0x0000000077C0C541+33] TROUBLESHOOTING: https://github.com/puppeteer/puppeteer/blob/master/docs/troubleshooting.md
Alex*
вроде есть описание на Git
Андрей
Ребят, есть спецы по puppeteer в связке mongo, node-scheduller и Docker? Нужно определить в каком месте происходит утечка памяти. У меня запущены 4 парсера основных, 3 из которых парсят HTML. И 1 основной парсер . Который парсит результаты работы указанных 4 сервисов. Даже если подчисту рестартануть Docker и зачистить базы, то через несколько часов начинаются дикие тормоза. Ищу консультанта, который за печеньки смог бы прояснить ситуацию.
1
Подскажите, как с веб страницы из JS кода извлечь переменную avail_dates, чтобы её можно было использовать в коде Puppeteer? <script type="text/javascript"> $(document).ready(function() { var avail_dates = ["03-11-2020","05-11-2020"]; }); </script>
1
ну можно попробовать через page.evaluate и потом вернуть из window.avail_dates. Как то там
При запуске в консоли браузера window.avail_dates не видит такую переменную
Назар
При запуске в консоли браузера window.avail_dates не видит такую переменную
а код можно поменять? Обьявить вне document.ready а присвоить внутри можно
Назар
или сделать $.exposed
1
или сделать $.exposed
Можно пример показать для понимания?
Назар
Можно пример показать для понимания?
ну то нужно код страницы поменять изначально.
Alexander
А можно ли в жс локальную переменную функции программно получить?
John
А если получить весь код в html, распарсить и регуляркой найти то что нужно
1
А если получить весь код в html, распарсить и регуляркой найти то что нужно
Такой вариант рассматривался, но думал, как-то проще обойтись.
Alexander
если просто исходники то можно document.querySelector('script') и все.
Alexander
ну или если динамически менять скрипт внутри то можно чето типа await page.setJavaScriptEnabled(false); получить все скрипты, чето с ними сделать, потом page.setJavaScriptEnabled(true), засунуть в страницу HTML без скриптов, await page.addScriptTag({ content: script });
Alexander
ну есть еще всякие page.evaluateOnNewDocument(), page.exposeFunction, че там эта функция вычисляет нужно подробнее смотреть
1
Подскажите, как нажать кнопку на сообщении Alert, которое открывает сам браузер? В окне 2 кнопки ОК и Отмена.
Andrey
https://pptr.dev/#?product=Puppeteer&version=v5.3.1&show=api-class-dialog
1
https://pptr.dev/#?product=Puppeteer&version=v5.3.1&show=api-class-dialog
Что-то не открывается ссылка
Andrey
странно, у меня норм, ну вот сразу решения: https://chercher.tech/puppeteer/alerts-puppeteer
Unknown
Ребят, нужна помощь по puppeteer. Есть вот такой код: await request.respond({ status: 200, contentType: "application/json; charset=utf-8", body: JSON.stringify(USER_DATA), headers: { "Access-Control-Allow-Credentials": "*", "Set-Cookie": "name=value", date: new Date().toUTCString() }, }); Проблема: в браузере нет кук в ответе на этот запрос. https://github.com/puppeteer/puppeteer/blob/v5.4.1/docs/api.md#httprequestrespondresponse Подскажите, плиз, что я делаю не так и как можно вернуть респонс с куками? * setRequestInterception - включен
Andrey
формат set-cookie возможно не нравится, маловато инфы
Andrey
Unknown
формат set-cookie возможно не нравится, маловато инфы
сравнивал с куками которые приходят от сервера. Они такие же, символ в символ
Andrey
Идей нет, когда разберешься напиши плз тут
𝑰𝒍𝒉𝒐𝒎
Всем привет. есть ли возможность сохранить изображение в кэше, чтобы сэкономить трафик при каждом запуске?
𝑰𝒍𝒉𝒐𝒎
указать userDataDir
Спасибо за ответ. Но указал папку, страница не открывается
𝑰𝒍𝒉𝒐𝒎
const browser = await puppeteer.launch({headless:false,userDataDir: './cache/'});
𝑰𝒍𝒉𝒐𝒎
Да. Там папки появились после запуска
𝑰𝒍𝒉𝒐𝒎
𝑰𝒍𝒉𝒐𝒎
Назар
ну почему то не грузит.
𝑰𝒍𝒉𝒐𝒎
ну почему то не грузит.
Все починил. Причина было в interception
𝑰𝒍𝒉𝒐𝒎
а как усилить кэш. до включение папки было 1.2 мб, сейчас 900 кб
𝑰𝒍𝒉𝒐𝒎
await page._client.send('Network.setCacheDisabled', { cacheDisabled: false });
𝑰𝒍𝒉𝒐𝒎
Оставляю ответ тут
𝑰𝒍𝒉𝒐𝒎
https://github.com/puppeteer/puppeteer/issues/2497
Alexey
Всем привет! Подскажите, как можно побороть такую проблему или куда копать? в цикле вызываю page.$eval(selector, e => e.outerHTML); но когда "наблюдаемая" страница обновляется, то у нее внутри, как я понимаю, перестраивается DOM, и в этот момент page.$eval может сильно тормозить. т.е. если замерять время, которое требуется на page.$eval, то оно увеличивается на порядки. Может это как то связано с тем, что поток, в котором выполняется javascript страницы, занят ее обновлением и папетир-вызов вынужден ждать...
Alexander
или чето такое
Alexander
или page.waitforselector
Alexey
цикл то я запускаю уже после того, как страница прогрузилась, просто на ней потом обновления начинают происходить (javascript шлет запросы на сервер и по ответам обновляет табличку с данными). И в page.$eval(selector, e => e.outerHTML); я как раз эту табличку пытаюсь достать
Alexey
надо попробовать, но че то сомневаюсь, что дело в этом - в доке: > Wait for the selector to appear in page. If at the moment of calling the method the selector already exists, the method will return immediately. а селектор не меняется, и таблица на странице тоже все время есть, просто значения в ней обновляются
Andrey
ты хочешь изменения в таблице фиксировать?
Alexey
я хочу их забирать со страницы, т.е. это условно мониторинг данных, которые отображаются на странице