Andrey
когда открываешь страницу после page,goto ждешь прогрузки?
🦋noteee
когда открываешь страницу после page,goto ждешь прогрузки?
Жду порядка 5-7 секунд. Он не сразу делает попытки подгрузки фрэймов, а сначала выполняет другие действия. Вводит другие поля
Andrey
page.goto(url, { waitUntil: ['load', 'domcontentloaded', 'networkidle2'], timeout: 30000 })
🦋noteee
Так, сейчас сделаю. А что делают эти аргументы?
Andrey
вот так для начала - ждать полной прогрузки страницы. Но если frame динамически будет подгружать или по таймауту - то тут придется действительно по таймеру проверять его прогрузку
Alhimik
А куда мне деваться?) Только так и придется делать
Вот скажи честно, ты в доку хоть раз заглядывал? )
Andrey
дада))) из доки
Alhimik
А куда мне деваться?) Только так и придется делать
page.on('frameattached', (frame) => { console.log(`[frameattached] URL: ${frame.url()}`); }); page.on('framenavigated', (frame) => { console.log(`[frameattached] URL: ${frame.url()}`); });
🦋noteee
Вот скажи честно, ты в доку хоть раз заглядывал? )
Так мне тут не поможет дока. Что бы что то понять из доки - нужно что то немного понимать
🦋noteee
page.on('frameattached', (frame) => { console.log(`[frameattached] URL: ${frame.url()}`); }); page.on('framenavigated', (frame) => { console.log(`[frameattached] URL: ${frame.url()}`); });
Куда мне именно это пихнуть, прям в середину когда где требуется фрэйм?
Andrey
😭
Alhimik
Куда мне именно это пихнуть, прям в середину когда где требуется фрэйм?
После создания/взятия страницы и до перехода по url.
Alhimik
🦋noteee
С событиями ты похоже тоже не работал никогда? )
Работал, но в puppetter нет вот и растерялся куда мне это пихать
🦋noteee
Я подождал, пролистал всю страницу. Прокликал кнопки, но нужное событие найти не смог. Этот фрэйм судя по всему не подгрузился, даже после ручного ввода карты
🦋noteee
Все что поймал .on
Alhimik
Все что поймал .on
Покажи код где goto и где page.on().
🦋noteee
Как он мог не прогрузиться, если ты с ним работаешь?
Так я ищу же другой фрэйм, а не https://forgottenanimals.ru/donate/
🦋noteee
Мне нужен такой
🦋noteee
Нашёл он только `https://forgottenanimals.ru/donate/`
🦋noteee
Фрэйм который мне нужен просто не подгружается
Alhimik
У меня пока нет возможности проверить на реальном коде, но по идее он должен видеть его.
Alhimik
Попробуй что-то типа такого тогда: while (true) { for (const frame of page.frames()) { console.log(`FRAME URL: ${frame.url()}`); } await page.waitForTimeout(1000); }
Alhimik
Ну и фрэймы могут быть вложенными.
Alhimik
Мне нужен такой
Посмотри структуру фрэймов, когда нажимаешь на стрелочку справа у розового поля.
Alhimik
Не поможет ведь
Мне интересно, есть ли там вообще такой фрэйм.
🦋noteee
Мне интересно, есть ли там вообще такой фрэйм.
Его нету с самого начала. Он появляется потом и неизвестно когда и при кких обстоятельствах
🦋noteee
Судя по всему и не факт что появляется..
Andrey
В html коде скрипт синхронный его вставляет в указанный <div>, магии там нет
Andrey
там кодеры тоже комментариев смешных понаписали, на коленке делали
🦋noteee
Ну появляется он только тогда когда ты нажимаешь на ввод карты?
🦋noteee
Но у меня не появляется..
Alhimik
😂😂
🦋noteee
Это плохое решение проблемы?
Alhimik
Это плохое решение проблемы?
Если другие у тебя не работают, а это работает то пусть будет хотя бы так. А с эстетической точки зрения оно ужасное. 😂
Alhimik
Хотя бы в массив запихни значения и в цикле доставай.
🦋noteee
Если другие у тебя не работают, а это работает то пусть будет хотя бы так. А с эстетической точки зрения оно ужасное. 😂
На эстетику пока я смотреть даже не буду. Мне важна точность срабатывания, что бы 100 из введеных карт на 100 разных компьютерах при разных обстоятельствах ввелись верно
Alhimik
const params = [ {value: "aaa", timeout: 100}, {value: "bbb", timeout: 100}, {value: "ccc", timeout: 200}, ]; for (const param of params) { await page.type(param.value); await sleep(param.timeout); }
🦋noteee
И зачем нужно вводить столько карт?
Массовая проверка карт на работоспособность
Alhimik
Массовая проверка карт на работоспособность
Неудачный выбор жертвы. Сайт ребятам положишь, судя по комментам они сами новички. 😂
🦋noteee
Да не, я так ддосить никого не буду. Это просто проверка заблокирована ли карточка или нет
🦋noteee
Если платеж на 200р прошёл то само собой карточка не заблокирована
Sasha
Нуну) а карты откуда?)
Alhimik
Это плохое решение проблемы?
Так это решение работает, но при этом фрэйма не видно, так?
🦋noteee
Нуну) а карты откуда?)
А это уже не мои проблемы, на совести тех людей, которые проверяют карты
🦋noteee
Так это решение работает, но при этом фрэйма не видно, так?
Вообще работает, но я не уверен что оно будет работать всегда. Думаю может просто багнуться
🦋noteee
А фрейма да, не видно. Я делаю клик на селектор рядом и он попадает по полю с вводом
🦋noteee
await page.screenshot({path: `name.png') - делает скриншот успешно await page.screenshot({path: `./papka/name.png') - говорит что путь не найден (папка создана)
🦋noteee
В папку почему то не хочет сохранять скриншот
Stas
Так попробуй
Alhimik
А фрейма да, не видно. Я делаю клик на селектор рядом и он попадает по полю с вводом
Попробовал в puppeteer и playwright. Puppeteer действительно не видит все фрэймы на этом сайте почему-то. А playwright видит. 🤷🏻‍♂️ Глубже пока нет желания разбираться, но можешь попробовать его.
Alhimik
playwright - первый раз слышу. Работает так же как и puppeteer?
Ну апи отличается местами. Но общий принцип одинаковый. Playwright более новая либа, написанная с учётом прошлых проблем Puppeteer. В этом есть как плюсы так и минусы (ну это субъективно конечно, но пока относительно свежий продукт и меньше соответственно примеров будешь находить). Но в большинстве случаев проблем не должно быть.
🦋noteee
Понял, спасибки
🦋noteee
Кстати, а у меня у одного puppeteer с ubuntu не запускается? Не до конца что то устанавливается от npm
🦋noteee
Ошибку хоть покажи.
Да это давно было, порядка месяца назад. Уже не осталось ни скринов, ни текста ошибки. Как я понял суть - npm что то до конца не установил или сам puppeteer до конца не установился
Vlad Vaviloff
А это уже не мои проблемы, на совести тех людей, которые проверяют карты
Т.е. канал последние 250+ сообщений помогает злоумышленникам тырить деньги с карт, замечательно.
Alhimik
Т.е. канал последние 250+ сообщений помогает злоумышленникам тырить деньги с карт, замечательно.
Puppeteer - это инструмент. Каждый сам решает как его использовать. Давайте не будем заранее судить никого, мы не знаем что он там в действительности делает. А помогали мы решать конкретную задачу, поиск формы внутри фрэйма. Но если он правда занимается чем-то незаконным, да ещё и с таким уровнем знаний, то недолго ему этим заниматься.
🦋noteee
На этом моменте идет переадресация на другую страницу сайта. Загрузка там не всегда быстрая. Можно как то сначала ждать, что бы страница загрузилась полностью (на которую была переадресация), а только после того начинался waitforselector? Просто страница за 30с не успевает загрузиться и waitforselector падает в ошибку, timeout
🦋noteee
await Promise.all([ element.click(), page.waitForNavigation(), ]);
Мне после page.click(#donate-cliick) нужно ждать около 30-70 секунд, пока пролизойдет переадресация и загрузится новая страница
Alhimik
В ноль установи и он будет ждать пока не перезагрузится страница.
🦋noteee
А можно await page.waitForSelector сделать что бы ждал более чем 30с?
🦋noteee
В ноль установи и он будет ждать пока не перезагрузится страница.
Так мне после перезагрузки страницы нужно ждать пока загрузится селектор, а это происходит долго из-за слабого интернета
🦋noteee
После перезагрузки страницы нужно await page.waitForSelector где-то на 70-90с
🦋noteee
а он максимум на 30с