Captain Maslori
если он не работает в вашей задаче - это другой вопрос, но такого в вашем сообщении не вижу...
Captain Maslori
.filter а лучше .some
Captain Maslori
а также сюда return и снятие observer-a
User
Спасибо
Alhimik
.filter а лучше .some
Чем он лучше? Тем что создаст новый ненужный массив? Вообще это дело вкусов, кто-то предпочитает функциональный стиль, кто-то императивный.
Alhimik
а также сюда return и снятие observer-a
Кстати, это да, можно снять. Но, я не припомню ни одного случая, когда мне это действительно нужно было бы в контексте pptr. Когда расширение для браузера пишу, там обычно такое нужно. Чтобы не нагружать страницу. Но pptr обычно отработал и перезагрузка страницы происходит. Хотя, конечно от задачи зависит.
User
Открытие страницы, нажимается кнопка и дальше пустой экран (скрин), код страницы тоже пустой. Задержки разные ставил и по 5 сек и по 30 сек после нажатия кнопки. Если вручную тоже самое делать, то нет проблем. Куда смотреть?
Captain Maslori
Чем он лучше? Тем что создаст новый ненужный массив? Вообще это дело вкусов, кто-то предпочитает функциональный стиль, кто-то императивный.
меньше букв больше смысла и у Вас переменная mutation не используется => ну собсно а зачем здесь этот императивный стиль если переживания по поводу ненужного массива то ramda или самописный some на [Symbol.iterator] я говорю просто про то что есть общевнятный лаконичный инструмент - some - реализовать можно и лучше, а блок кода тут с переменной имхо тут не нужен
Alhimik
Открытие страницы, нажимается кнопка и дальше пустой экран (скрин), код страницы тоже пустой. Задержки разные ставил и по 5 сек и по 30 сек после нажатия кнопки. Если вручную тоже самое делать, то нет проблем. Куда смотреть?
Мало информации. Что угодно может быть. Может видят что ты pptr используешь и подсовывают пустую страницу. Или ты некорректно повторяешь то что происходит при реальном нажатии.
Alhimik
меньше букв больше смысла и у Вас переменная mutation не используется => ну собсно а зачем здесь этот императивный стиль если переживания по поводу ненужного массива то ramda или самописный some на [Symbol.iterator] я говорю просто про то что есть общевнятный лаконичный инструмент - some - реализовать можно и лучше, а блок кода тут с переменной имхо тут не нужен
> общевнятный лаконичный Нет такого. Есть личные предпочтения :)
Captain Maslori
если бы мне нравилось писать код внутри eval я бы так же говорил, а еще что я всё контролирую и не допускаю ошибок следовательно норм
Alhimik
Ну если приведёшь пример кодстайла, который прямо требует/рекомендует использовать функциональный подход против императивного везде где это можно, тогда ещё можно обсудить.
User
Мало информации. Что угодно может быть. Может видят что ты pptr используешь и подсовывают пустую страницу. Или ты некорректно повторяешь то что происходит при реальном нажатии.
Как можно скрыть, что pptr используется? Нажатия кнопки, вроде, нормально отрабатывается, но даже код не могу посмотреть, т.к. тупо пустая страница.
Alhimik
Я вот всегда пишу в императивном стиле. Фильтры и мапы использую конечно, когда они реально нужны.
Alhimik
Как можно скрыть, что pptr используется? Нажатия кнопки, вроде, нормально отрабатывается, но даже код не могу посмотреть, т.к. тупо пустая страница.
Я не знаю как ты на кнопку нажимаешь, если внутри страницы, то это проверяется элементарно через isTrusted. Иногда перед нажатием могут обрабатываться какие-то другие события, например наведение курсора мыши на кнопку и т.д.
Alhimik
Как можно скрыть, что pptr используется? Нажатия кнопки, вроде, нормально отрабатывается, но даже код не могу посмотреть, т.к. тупо пустая страница.
Ну вот я помню какое-то время у магазина DNS, если в заголовке юзерагента был headless, они отдавали код с бесконечным циклом и была белая страница, к примеру.
User
Ну вот я помню какое-то время у магазина DNS, если в заголовке юзерагента был headless, они отдавали код с бесконечным циклом и была белая страница, к примеру.
Срабатывает 1 раз из 20-50, т.е. после нажатия открывается другая страница, но в большинстве случаев пустая. Нажатие точно обрабатывается, т.е. нажимается на кнопку. Может быть из-за user Agent? Пробовал разные подставлять, особо не помогает.
Alhimik
Не важно, кодстайл это холиварные темы, не вижу смысла их обсуждать. Каждый будет писать как ему нравится. И это нормально.
Alhimik
А если в команде пишешь то так же придётся изменить свой подход под принятый стиль.
Max
привет всем. Кто с капчами работает, ни у кого в последние несколько дней не наблюдается проблем с invisible recaptcha? Как-то стала она pupetteer детектить, даже через ферму не получается обойти защиту.
Denzel
Всем привет нужно доработать бота , $ пишите в лс
Sander
Добрый вечер, обновил версию puppeteer, после чего некоторые функции перестали работать: - скриншот - закрытие таба браузера в launcher добавлены конфигруации `{ args: ['--single-process'] }`, из-за этой конфигруации оно и ломается, хотя раньше все работало.. но если запускается программа в "lambda функции", то она должна быть включена, помню возникали проблемы, когда программа пыталась работать в несколько потоков, может кто сталкивался с такой проблемой
Sander
Not exactly, but yes... AWS Lambda only gives us one CPU, which means we are forced to use the --single-process argument. On the other hand, incognito mode won't work in --single-process mode.
Sander
const run = async () => { const browser = await apifyLaunch() const page = await newPage(browser) await page.goto('https://youtube.com/') await delay(3000) // ? await page.screenshot({ fullPage: false, path: 'screenshot1.png' }) await page.evaluate(() => {}) await browser.close() } ;(async () => { await run() })() --- - без delay(3000) - все работает - с delay(3000) и без "--single-process" - тоже работает - с delay(3000) и с "--single-process" - не работает собственно мне не понятно, как решить эту проблему, это же обычный setTimeOut, почему елси puppeteer запущен в одном потоке, то возникают такие проблемы, можно ли что-то сделать, так как я могу запустить ее только таким образом
Дима
Error: We either navigate top level or have old version of the navigated frame как убрать эту ошибку или хотя бы чтобы скрипт не останавливала, try catch почему-то не срабатывает
精神に強い
Приветсвую, знает кто как найти кнопку с кастомным аттрибутом и нажать на нее? <button data-testid="button-agree" type="button" class="scmp-btn scmp-btn--default w-button--footer sm:scmp-ml-sm md:scmp-ml-md lg:scmp-ml-dialog">Text</button> пробовал подождать кнопку const waitBtn = await page.waitForSelector('[data-testid*="button-agreer"]'); Потом нажать const btn = await page.$('[data-testid="button-agreer"]', { clickCount: 1 }) или const btn1 = await page.click('[data-testid="button-agreer"]', { clickCount: 1 })
精神に強い
Я понял почему не могу достучаться к элементу он находится в псевдоэлементе типо <div data-testid=‘buttons-wrapper’> ::before <button data-testid="button-agree" type="button" class="scmp-btn scmp-btn--default w-button--footer sm:scmp-ml-sm md:scmp-ml-md lg:scmp-ml-dialog">Text</button> </div>
Black_Yuzia
Или вопрос в другом 👀
Black_Yuzia
Иногда надо подождать прямо таки кнопку
精神に強い
Так я сначала ставил waitForSelector и селектор блока выше этих кнопок который имеет ::before Он ждал но кнопки потом не нажимал, уже тогда когда они отрисованные в дом дереве
Captain Maslori
button[attr=value]
ну мб еще кавычки надо под value
Captain Maslori
еще около-костыльный вариант - ловить ее через mutationobserver на родителе, но мне кажется это лишнее, должно быть норм и так
Layer player
привет только поставил puppeter, в скриптах только учусь, сразу же получил затык на втором шаге, кнопка "sign in" не нажимается после ввода пароля. куда копать
Fox
Добрый вечер. Кто нибудь знает как включить эмуляцию телефона через кнопку в девтулзах (программно)? emulate не катит
Fox
ну или как получить url девтулз для страницы с самой последней версией хрома
AF
Ребят всем привет! Кто может подсказать как кликнуть в всплывающие окно системы? Сначала чтобы открыть тип ресурса, а потом выбрать пункт иллюстрации
AF
AF
Black_Yuzia
мб и надо, в зависимости от контекста?. Но будет работать и так
AF
На маке в долфине работает селект корректно, в себя на стационаром компьютере пробую, папитир не видит половину кнопок на сайте. Может кто-то сталкивался и есть решение?
User
Ребят всем привет! Кто может подсказать как кликнуть в всплывающие окно системы? Сначала чтобы открыть тип ресурса, а потом выбрать пункт иллюстрации
В браузере в инспекторе нажмите правую кнопку на "select aria-label=" и Копировать CSS-селектор. В puppeteer: await page.select('скопированный селектор', '2') где '2' - Иллюстрации, '1' - Фото
User
привет только поставил puppeter, в скриптах только учусь, сразу же получил затык на втором шаге, кнопка "sign in" не нажимается после ввода пароля. куда копать
Что является "вторым шагом"? Если это, где keyboard.press если просто await page.click('селектор') где Селектор - CSS-селектор кнопки "Sign in".
Heinrich
Всем добрый вечер, подскажите, пожалуйста. проблема в том что я не знаю как в браузере включить режим эмуляции телефона.
R-lion
Всем привет, можно ли обойти как ни будь smart captcha? За помощь готов заплатить денежку!!!
User
❓Как найти кнопку по названию самой кнопки, например, "Отправить", чтобы нажать на неё, т.к. селектор всё время меняется.
Captain Maslori
❓Как найти кнопку по названию самой кнопки, например, "Отправить", чтобы нажать на неё, т.к. селектор всё время меняется.
Либо через evaluate используя xpath (конкретно код не напишу т.к. недоразобрался), либо используя структуру документа закодить последовательность вложенных селекторов через > или просто пробел, в один селектор, но если там прям вообще все допустим на дивах и прям нету атрибутов за которые зацепиться то первый вариант. Я если честно слышал что такое бывает но в жизни ни разу так и не столкнулся почему-то
Captain Maslori
В частности, если Отправить это часть какой-то формы, с которой вы уже работаете, селектор можно же вызвать от тега form и тд, и вообще можно ходить по дереву элементов через children/parentElement. Но если кнопка просто болтается фиг пойми где то окей может быть xpath того стоит
Дима
User
❓Как отловить ошибку waitForResponse() если истекает timeout? Заключил в try catch, всё равно не ловит ошибку вылетает: UnhandledPromiseRejectionWarning: TimeoutError: Timeout exceeded while waiting for event
Alhimik
Error: We either navigate top level or have old version of the navigated frame как убрать эту ошибку или хотя бы чтобы скрипт не останавливала, try catch почему-то не срабатывает
Возможно фрэйма уже нету. Try/catch должен срабатывать, если с асинхронностью корректно работать.
Дима
Покажи код.
блин это жир его скидывать, ну логика такая, что открывает сайт, и делает клики по нему рандомные по ссылкам
Дима
типо беру <a></a> которые видны на странице и клацаю по ним
Alhimik
блин это жир его скидывать, ну логика такая, что открывает сайт, и делает клики по нему рандомные по ссылкам
Не нужно весь код. Речь о коде, который вызывает ошибку и который обёрнут в try/catch.
Дима
там функция в функцие
Alhimik
Ты скорей всего забыл где-то await.
Дима
vseok = false; googling = 0; do { try { await googleNew(browser, 'zapros.txt'); googling++; vseok = true; } catch (e) { console.log(e); } } while(vseok === false || googling < 5);
Дима
Ты скорей всего забыл где-то await.
та оно работает, просто рандомно вылазит ошибка
Дима
бывает сайтов 10 проверит все ок, а потом вылезит, а бывает вообще не вижу, причем может быть на том же сайте
Alhimik
та оно работает, просто рандомно вылазит ошибка
Понял, я тебя с User перепутал, это у него UnhandledPromiseRejectionWarning.
Дима
Понял, я тебя с User перепутал, это у него UnhandledPromiseRejectionWarning.
https://github.com/puppeteer/puppeteer/issues/7050 перебробовал это, тоже не хочет, баг уже с 2019 года
Alhimik
та оно работает, просто рандомно вылазит ошибка
Но ты ошибку ловишь и можешь обработать? Тогда достаточно перезапускать страницу/браузер. Если это действительно ошибка в библиотеке.
Alhimik
Не могу обработать сразу скрипт вырубает
Нужен минимальный код для воспроизведения ошибки. Иначе не понятно.