Alex*
Какие биржи имеете ввиду?
Например kWork. Посмотрите, что заказывают. Попробуйте реализовать.
SH
Привет, в чем может быть проблема что с параметром headless: false Не открывается браузер? сам процесс создается
Aleksey
Привет, в чем может быть проблема что с параметром headless: false Не открывается браузер? сам процесс создается
Много в чем. Скорее всего, не хватает компонентов для старта gui-составляющей. Какая-то ошибка при этом появляется?
SH
Много в чем. Скорее всего, не хватает компонентов для старта gui-составляющей. Какая-то ошибка при этом появляется?
А сори) короче при запуске через pm2 почему-то всегда запускается в "безголовом режиме" хмм
GamiD
почему это строна не игнорируется если ошибка
GamiD
GamiD
=)
Alhimik
почему это строна не игнорируется если ошибка
У тебя выше перед page.waitForXPath() так же должен быть await. И дальше по коду.
Alhimik
Изза этого ошибка?
Не знаю, но не исключено. Так как ты думаешь что дождался элемент и выполняешь следующее действие, но это не так, элемента может не быть.
GamiD
он работает стабильно но бывают моменты когда вот так останавливается
GamiD
не понятно почему
GamiD
элемент есть на странице не знаю что ему не нравится
GamiD
если даже нету почему tru не срабатывает а останавливается скрипт
Alhimik
Судя по этому сообщению, если слева не вышел за экран символ, то у тебя там таймаут всего лишь в 10 мс стоит?
GamiD
нет почему это 10мс?
GamiD
но не исключение что символ за пределами экрана
Alhimik
нет почему это 10мс?
Потому что на скриншоте так :) Если слева символ не уехал за экран, я же не вижу всего.
GamiD
или позади другого элемента
Alhimik
Но судя по строке TimeoutError он не уехал и там действительно 10 мс.
GamiD
в этом и дело что таймаут по умолчанию 60сек
Alhimik
в этом и дело что таймаут по умолчанию 60сек
Ну вот с этого и начни проверку, может там не 60 сек.
Alhimik
60сек 100% Стоит
Ну ты в следующий раз код показывай с номерами строк чтобы можно было понять где именно ошибка произошла.
Alhimik
И ошибку полностью со всем стэктрейсом, тогда можно будет локализовать её.
GamiD
тут видно полностью ошибка
GamiD
GamiD
строка 1596
Alhimik
тут видно полностью ошибка
Нет, стэк не полный. Видны только ошибки в библиотеке кукловода. Твой код, который вызвал ошибку не виден. Либо у тебя там с асинхронностью проблемы.
aburybin
может подскажет кто , не могу поймать всплывающее окно при нажатии на Reply на посте в твитере
aburybin
Может оно в iframe?
да, спасибо
GamiD
В чем может быть проблема?
GamiD
GamiD
GamiD
Пустой видит
Armen
Всем привет, Ищу компетентного сотрудника для автоматизации регистрации аккаунтов в Octo Browser через puppeteer
Armen
Напишите в Лс пожалуйста
issssrt
После загрузки основной страницы в puppeteer, она выполняет ajax (xhr) запрос. Можно как-то получить эти параметры целиком, например в виде json?
issssrt
page.on("response", ...);
Вот именно post-параметры не получается таким образом получить( можете пример прислать?
Alhimik
Тогда: page.on("request", ...);
Alhimik
В документации есть примеры.
issssrt
Тогда: page.on("request", ...);
Спасибо! Я что-то с тупил, логично что реквест))) - http://i.imgur.com/qfoxyql.png
aburybin
можно как -нибудь при клике на элемент в браузере вытащить его уникальный селектор?
Shieldy
(4 + 4) @tarasvasilev, please, send the solution to the arithmetic operation provided within the time amount specified to this group, otherwise you will be kicked. Thank you! (60 sec) Powered by 1inch Network
Kenan
можешь повесить клик на документ и при всплытии поймать event.target и глянуть его класс
Eugene
Ребят, что сейчас есть хорошего для скрытия puppeteer? Что-то палится не понимаю что
Aleksey
Ребят, что сейчас есть хорошего для скрытия puppeteer? Что-то палится не понимаю что
Куча всего, начиная с заголовков и заканчивая одинаковым разрешением, айпи адресом. Могут использоваться куки, которые ты перед запросом не чистишь или какие-то значения из локал сторедж.
Вайпер
Привет всем, подскажите пожалуйста можно ли сделать такое, у меня есть страница с прогрессом, мне нужно получать определенные тэги их будет несколько, как только они будут появляться на странице.
Вайпер
MutationObserver.
Спасибо большое
Вайпер
MutationObserver.
Что то не вышло, не могу понять почему, может я туплю, но у меня что то не определяет
Вайпер
Есть ещё варианты, может кто знает?
Alhimik
Что то не вышло, не могу понять почему, может я туплю, но у меня что то не определяет
Если не нравится подход с MutationObserver, то остаются обычные таймеры в цикле. Просто опрашивай нужные тебе элементы раз в несколько миллисекунд, к примеру. Если цель получать тэги сразу же при изменении то нужно разобраться с MutationObserver. Хотя и первый вариант может помочь в простейших случаях. Но, если элементов много, то менее производительней.
Вайпер
Да у меня ситуация следующая, есть страница, на ней сплошной текст через br, и появляются нужные мне тэги, мне от туда нужен только текст, я могу до них достучаться и найти текст который появится через waitForFunction, но мне этот текст нужно извлечь и выкинуть в телеграм бота, но waitForFunction не слушает параметр контекста самого бота
Alhimik
Да у меня ситуация следующая, есть страница, на ней сплошной текст через br, и появляются нужные мне тэги, мне от туда нужен только текст, я могу до них достучаться и найти текст который появится через waitForFunction, но мне этот текст нужно извлечь и выкинуть в телеграм бота, но waitForFunction не слушает параметр контекста самого бота
Не понимаю на каком этапе проблема. 1. Нужно заинжектить на страницу MutationObserver (он будет следить за контейнером) 2. Объявить exposeFunction в пространстве node.js, эта функция будет видна внутри страницы по указанному имени 3. Когда MutationObserver видит любое изменение внутри контейнера, он вызывает exposeFunction
Вайпер
Можешь еще просто рекурсию сделать с async/await и тайм-аутом которая будет обновлять документ или возвращать нуль если тайм-аут истечет
А я решил уже задачу, просто сам тупил не мог понять метод MutationObserver, посидел по частям разобрал, вроде разобрался, но все равно спасибо, за помощь
Innerbloom
async function search () { try { const browser = await puppeteer.launch({headless: false}); const page = await browser.newPage(); await page.setViewport({width: 1280, height: 1300}) await page.goto(URL, {timeout: 10000}); await page.type(selectors.searchBox, randomValue); await page.keyboard.press('Enter', {delay: 2000}); // ждет 5 секунд for (let i = 0; i < 4; i++) { const next = await page.$$(selectors.productLinks, { timeout: 3000 // 8 секунд таймаут }); await next[i].click({delay: 1000}); // клик по элементу первом const helpful = await page.waitForSelector(selectors.helpful) await helpful.click(); const back = await page.waitForSelector(selectors.back) await back.click({delay: 5000}); // 5 сек возврат назад await new Promise(r => setTimeout(r, 3000)) } }catch (error) { console.log(error) } }setInterval( () => { search() }, 5000); Как сделать что б функция не открывала постоянно новое окно браузера ?
Innerbloom
Мне надо что б оно крутило на одной странице все
Alex*
async function search () { try { const browser = await puppeteer.launch({headless: false}); const page = await browser.newPage(); await page.setViewport({width: 1280, height: 1300}) await page.goto(URL, {timeout: 10000}); await page.type(selectors.searchBox, randomValue); await page.keyboard.press('Enter', {delay: 2000}); // ждет 5 секунд for (let i = 0; i < 4; i++) { const next = await page.$$(selectors.productLinks, { timeout: 3000 // 8 секунд таймаут }); await next[i].click({delay: 1000}); // клик по элементу первом const helpful = await page.waitForSelector(selectors.helpful) await helpful.click(); const back = await page.waitForSelector(selectors.back) await back.click({delay: 5000}); // 5 сек возврат назад await new Promise(r => setTimeout(r, 3000)) } }catch (error) { console.log(error) } }setInterval( () => { search() }, 5000); Как сделать что б функция не открывала постоянно новое окно браузера ?
Если я все правильно понял, то ... окно браузера === вкладка Соберите сначала все ссылки на странице, закройте текущую, а затем по очереди открывайте из массива собранных. Хотя на практике, если надо много парсить, как раз наоборот, сразу открываешь несколько вкладок.
Captain Maslori
Приветствую, кто-нибудь может подсказать, чем это может быть вызвано? Компилю из es-модулей в commonjs, поэтому код выглядит после компиляции как на фото, но это вызывает ошибки puppeteer
Captain Maslori
Captain Maslori
Captain Maslori
релевантная часть конфига, если нужно:
Alhimik
Приветствую, кто-нибудь может подсказать, чем это может быть вызвано? Компилю из es-модулей в commonjs, поэтому код выглядит после компиляции как на фото, но это вызывает ошибки puppeteer
> чем это может быть вызвано? Могу предположить что дело в exposeFunction. Компилятор не знает что функция используется из контекста страницы. И, возможно, удаляет её. Если это так, добавь ложный вызов, который никогда не будет осуществлён, но так, чтобы компилятор не смог этого понять :) Например: if (Date.now() === 8640000000000000) { // maximum date // call function } Ну или найди опцию, которая позволит не трогать функцию.
Alhimik
Компилятор = компилятор typescript? За 1 строку до exposeFunction нода видит эту функцию, я ее для теста принтил
Я уже не помню деталей реализации. Вроде в ишью у них читал. Но сейчас посмотрел, там очень много ишью с exposeFunction. Так что точно не скажу. Надо проверять. Но, насколько я помню, проблема именно в том что у ноды и браузера отдельные контексты.