Pavel
Да, ты прав.
Pavel
waitUntil:networkilde0 решает ее
Pavel
он остался от старого кода, да.
Pavel
забавно, но с таймаутом быстрее ходит по страницам :D
Pavel
Спасиб, я вдруг понял что он на ноде. И что я могу использовать экспериментальноe апи https://chromedevtools.github.io/devtools-protocol/tot/HeadlessExperimental
1
Картинки и CSS отсекаю так, см. картинку, а как отсекать, например, счётчики посещений или статистику Яндекс? Они реально тормозят загрузку страницы.
Pavel
Вам не кажется что эту группу нужно добавить playwright или вообще QA браузерное? Лушников перешел в playwright, например.
Pavel
можно отключить скролы
1
Пример перебора прокси из файла. Вверху закреплено сообщение, там можно найти много примеров.
Gambit501
Это юзал? https://www.npmjs.com/package/puppeteer-extra-plugin-stealth
1
Подскажите, необходимо отправить снимок экрана в Телеграм через POST запрос с заголовком Content-Type: multipart/form-data, если подставлять url на файл, то отправляется, а как локальный файл не пойму. Пробовал подставлять в photo: file:// тоже не работает. Текст отлично отправляется используя заголовок Content-Type: application/json
Alex
Dmitri нода?
Alex
Dmitri советую не париться, а взять уже готовую обертку https://github.com/yagop/node-telegram-bot-api
Alex
Кто-то кинопоиск парсил?
1
В какую сторону смотреть? Задача, при запуске несколько одинаковых скриптов, чтобы они считывали параметры из файла: param1 param2 . . . . . param N Чтобы каждый скрипт не считывал тот параметр, который уже другой использует или использовал. Проблема при одновременном доступе. Скажем при обращении к param1 ставится "*", что этот параметр сейчас используется или использовался и другой скрипт его не может использовать, но возникает проблема при одновременном обращение. Всё равно при чтении и записи есть временной интервал. Может не в файле реализовывать, а в какой-нибудь базе данных или скажем в Google Таблице?
Alex
Как в page.evaluate передать переменную?
Alex
Таким образом не видно
Pavel
Таким образом не видно
Пробрось ее в конце еще, как в setTimeout
Pavel
В body лежит наверно
1
@munrocket. Вроде, придумал алгоритм решения задачи. При запуске любого количества экземпляров одного скрипта, они по очереди берут параметры из файла. При считывании параметра помечают его "*", тем самым другой скрипт уже игнорирует этот параметр и считывает другой. Для проверки сделал паузу в случайном порядке до 3 сек.
Андрей
Привет, ребят, можно ли в jquery или cheery сделать выборку по нескольким вариантам аттрибута? Что-то типа $('a[title="Волки"][title="Овцы"]') ?
Андрей
Спасибо!
Андрей
Привет, ребят. Что не так с транслированием портов и нэймингов в docker-compose сборке (в частности проблема с tor-proxy соединением)? https://qna.habr.com/q/714443
Nikita
Господа, подскажите пожалуйста. Запускаю в докере puppeteer. И почему-то в докере он не прогружает html страницы. т.е. не видит какие-то селекторы. А на локалке все работает без проблем вообще
Pavel
Господа, подскажите пожалуйста. Запускаю в докере puppeteer. И почему-то в докере он не прогружает html страницы. т.е. не видит какие-то селекторы. А на локалке все работает без проблем вообще
Может не успевает или с портами трабла. Поясните за докер, он кроссплатформеный? С 1 команды устанавливается при наличии конфигов?
Pavel
Я
Попробовал puppeteer-core, вообщем не нужно. Не универсально для всех, лишних 150 мегов не помешает в devDependency.
Roman
не хромиум
Pavel
У меня под линухом не завелось, не стал заморачиваться. Так как другим тоже будут траблы потом.
Roman
я думаю многие не знают (но многие и знают), что хромиум сбилженный роботом, который тянет пптр не имеет кодеков
Roman
и 80% видео не будет грузится даже в нем
Pavel
Хмм, забавно, не в курсе был.
Pavel
Не было таких задач.
Roman
ну если шо меня тыркайте, я его весь выдрочил и я контрибьютор пупитра
Roman
могу че нить подсказать
Roman
для прикола можете сами скомипилить даже себе хромиум
Roman
если есть машина
Roman
компляция на мощном серваке около 4 часов
Roman
плюс 20 гигов исходников
Roman
единственное что я не трогал это файрфокс пддержку
Roman
+ сразу отказывайтесь от использования pipe режима, это смех
Roman
IPC через аутпут терминала и инпут
Pavel
У меня только была трабла с тэгом video, и детерминированностью скриншотов между сессиями, но удалось захукать потом. Кодеки работали.
Pavel
/* Semi-determitistic video */ let play = HTMLVideoElement.prototype.play; HTMLVideoElement.prototype.play = async function() { play.call( this ); this.addEventListener( 'timeupdate', () => this.pause() ); function renew() { this.load(); play.call( this ); RAF( renew ); } RAF( renew ); }
Roman
все равно впалят
Roman
не занимайтесь вообще таким лучше
Roman
пакостями
Roman
сек
Roman
https://browserleaks.com/canvas
Roman
а ты мне скажешь на это "хаха да кто такое будет проверять"
Roman
так вот фингерпирнт канваса давно в коде метрики
Roman
и все твои визиты будут линукс)
Roman
а юзерагент виндоус 😄
Roman
ну ты же спрасил как
Pavel
единственное что я не трогал это файрфокс пддержку
Там уже месяца 3 на issue никто не отвечает, кстати. Вот интересное апи которое может избавить откостылей: https://github.com/puppeteer/puppeteer/issues/5402
Roman
я и сказал не?
Roman
наши разговоры дорого стоят
Roman
не так много экспертов по пупитру в рф)
Roman
можно решить эту проблему на самом деле
Roman
но в паблике никто не будет рассказывать
Gambit501
А как же анонимный браузер сфера? ониж как то нашли решение, да и другие браузеры есть, которые тоже меняют шрифты
Alexander
@bin2hex @satanch я работаю manual tester-ом, мне очень понравился Puppeteer, хочу автоматизировать проверку UI элементов и некоторые E2E тесты, уже написал простенькие тесты с Puppeteer-ом. Можете подсказать как дальше прокачиваться с использованием puppeteer, где можно посмотреть более advanced level примеры, а то в основном везде basic level. Извините за нубский вопрос если что.
Alexander
@bin2hex просто мне показалось что у меня слишком простые тесты: типа shouldExist - click - assert + вынес отдельно селекторы, хотел посмотреть на более сложные примеры. Окей, я понял, буду разбираться с докой и писать примеры для своего приложения.
Alexander
Подскажите как выбрать и нажать кнопку, которая содержит конкретный текст, которая спрятана в куче div-ов с динамическими классами.
DeniskaAb
А как получить атрибут onclick через селектор?
DeniskaAb
логично, не поспоришь. Как a[onclick] мне нужно функцию из атрибута как текст, как сделать через JS я знаю, а как будет просто селектором.
Андрей
Привет ребят Как. правильно прописать proxy-server для puppeteer с ссылкой на контейнер с tor-proxy? https://qna.habr.com/q/715353
倫太郎
倫太郎
че та много всего за раз
Андрей
Спасибо, curl подрубил к контейнеру ноды. docker exec -it 03c2c7be89f8 curl --socks5-hostname tor:9150 https://ipinfo.tw/ip 166.70.207.2 Но это не решило проблему. При запуске puppeteer итоговая ошибка: Error: net::ERR_PROXY_CONNECTION_FAILED at <b>https://sitename.ru</b> at navigate (/var/www/node_modules/puppeteer/lib/FrameManager.js:120:37) at processTicksAndRejections (internal/process/task_queues.js:86:5) -- ASYNC -- at Frame.<anonymous> (/var/www/node_modules/puppeteer/lib/helper.js:111:15) at Page.goto (/var/www/node_modules/puppeteer/lib/Page.js:672:49) at Page.<anonymous> (/var/www/node_modules/puppeteer/lib/helper.js:112:23) at PuppeteerHandler._callee2$ (/var/www/helpers/puppeteer.js:69:19) at tryCatch (/var/www/node_modules/regenerator-runtime/runtime.js:45:40) at Generator.invoke [as _invoke] (/var/www/node_modules/regenerator-runtime/runtime.js:271:22) at Generator.prototype.(anonymous function) [as next] (/var/www/node_modules/regenerator-runtime/runtime.js:97:21) at asyncGeneratorStep (/var/www/helpers/puppeteer.js:12:103) at _next (/var/www/helpers/puppeteer.js:14:194) at processTicksAndRejections (internal/process/task_queues.js:86:5) Если закомментить: '--proxy-server=socks5://tor:9050' То работает МОжет помимо курла еще какую то утилиту заинсталлить надо?
Alexander
@bin2hex спасибо за подсказку, вообщем реализовал это так: 1. в helpers.js вынес: clickXPath: async function(page, xpath) { try { const [button] = await page.$x(xpath); if (button) { await button.click(); } } catch (error) { throw new Error(Could not click on xpath: ${xpath}) } }, 2. в самом файле тестов добавил: const clickXPath = require('../lib/helpers').clickXPath 3. и в самом it уже передаю значения xpath: await clickXPath(page, "//button[contains(., 'Log in')]")
Alexander
@bin2hex тут нашел https://stackoverflow.com/questions/47407791/puppeteer-click-on-element-with-text у меня сработало
Alexander
@bin2hex окей, спасибо, пойду дальше разбираться.