Alhimik
в хромиум
Где именно ты проверяешь? Страница сайта, страница popup, background скрипт?
Андрей
в консоли, на странице сайта
Alhimik
в консоли, на странице сайта
chrome.tabs доступен в background.
Андрей
chrome.tabs доступен в background.
Через evaluate который запускается?
Alhimik
Через evaluate который запускается?
Нет, это бэкграунд скрипт расширения. Он предлагает из него вызвать открытие попапа через код.
Андрей
👍🏻
А теперь незнаю как взаимодействовать с этим бэкграундом)) селекторы вообще не видит
Alhimik
А теперь незнаю как взаимодействовать с этим бэкграундом)) селекторы вообще не видит
Так в бэкграунде и не нужно взаимодествовать. Взаимодействовать нужно со страницей popup.
Андрей
Так в бэкграунде и не нужно взаимодествовать. Взаимодействовать нужно со страницей popup.
await extBackgroundPage.evaluate(() => { chrome.tabs.query({ active: true }, tabs => { console.log(tabs) chrome.browserAction.openPopup((x)=> x); }) }) Это оно запускает этот popup в бэкграунде, но а как теперь мне к этому popup обращаться?))
Андрей
Он вызывает popup из бэкгрануда. Сам popup должен открыться как обычная страница.
Вот он, оно в бэкграунде лежит, другого подобного нету ничего и тайтл у него AdSpoiler какраз
Андрей
Но я к нему обращаюсь, а оно не ищет нужные селекторы
Андрей
Но я к нему обращаюсь, а оно не ищет нужные селекторы
const targets = await browser.targets(); const newTarget = targets.find(target => target.url().search('generated_background_page.htm') > -1); const adspoiler = await newTarget.page();
Alhimik
Вот он, оно в бэкграунде лежит, другого подобного нету ничего и тайтл у него AdSpoiler какраз
Это фоновая страница, тебе нужен попап. Ты же должен видеть открылся попап расширения или нет.
Андрей
Это фоновая страница, тебе нужен попап. Ты же должен видеть открылся попап расширения или нет.
И правда, после задержки в 2 сек он появился)) но выдает ошибки при обращении: TypeError: Cannot read property 'waitForSelector' of null
Андрей
И правда, после задержки в 2 сек он появился)) но выдает ошибки при обращении: TypeError: Cannot read property 'waitForSelector' of null
const newTarget = targets.find(target => target.url().search('popup.html') > -1); const adspoiler = await newTarget.page() await adspoiler.waitForSelector("input")
1
Как подставить параметр? let param = true; const browser = await puppeteer.launch({ headless: `${param}`, });
Andrey
headless: param 😏
1
headless: param 😏
Пробовал, не работает UPD. Работает, мой косяк )
Ruslan
Ребят всем привет. Есть какие либо правила чата? А то спросил только что про решение каптчи в общий чат по JS и меня забанили
Alhimik
Ребят всем привет. Есть какие либо правила чата? А то спросил только что про решение каптчи в общий чат по JS и меня забанили
Банить не буду, но и смысла тут спрашивать нет. Тут всё же чат о конкретном инструменте. P.S.: По поводу банов. У некоторых людей складывается ложное представление что обход капч возможен исключительно для нехороших целей. Потому и такое отношение, но я его не разделяю.
Alhimik
Есть же адекватные люди. Вопрос будет по puppeteer
Спрашивай конечно, я не против.
Ruslan
Проблема заключается в следующем. После того как с сервиса получил ответ с решением каптчи вставляю его в <text> но проблема в том что кнопка submit некликабельна пока не нажмешь на чекбокс каптчи.
Ruslan
Я уже 2 дня пытаюсь кликнуть по этому чекбоксу
Ruslan
Но он он находится в frame1 > frame2 > checkbox
Ruslan
к первому frame могу получить доступ но уже к другому фрейму который внутри него не могу
Ruslan
Ruslan
Я про это
Alhimik
Внутри фрэйма можно искать другие фрэймы.
Ruslan
Alhimik
Так не получится. Нужно сначала добраться до конкретного фрэйма и в нём делать вызовы.
Ruslan
const handleFrame2 = await frame.waitForXPath(' '); const frame2 = await handleFrame2.contentFrame();
Ruslan
Вот так пытаюсь но он пишет .contentFrame not a function
Alhimik
const handleFrame2 = await frame.waitForXPath(' '); const frame2 = await handleFrame2.contentFrame();
Тебе нужен page.frames(), потом внутри так же. Пока не найдёшь свой.
Alhimik
Но там не все фрэймы могут быть видны. Я уже раньше объяснял это кому-то. Поищи по моим сообщениям. Возможно придётся включить --single-process.
Alhimik
Или посмотри в сторону playwright. Там с этим получше.
Ruslan
page.frames() возвращает 3 фрейма включая главную страницу. Обращаюсь page.frames()[1] это нужный мне фрейм но когда у него вызываю childFrames() возвращает пустой массив хотя фрейм там есть
Ruslan
Или посмотри в сторону playwright. Там с этим получше.
Сейчас гляну что это вообще. Спасибо
Ruslan
Вот, там речь была о --disable-features=site-per-process, а не сингл процессе.
Я просто с puppeteer только неделю как работаю. Это надо в lunch прописать?
Ruslan
У меня немного по другому
Ruslan
Ruslan
Сейчас доку глянул там нет args в connect
Alhimik
Сейчас доку глянул там нет args в connect
В коннект и не получится, браузер-то уже запущен. Аргументы могут задаваться только при запуске.
Ruslan
А нельзя интересно выше просто написать await puppeteer.lunch()?
Ruslan
Извини если туплю
Ruslan
Заранее
Alhimik
А нельзя интересно выше просто написать await puppeteer.lunch()?
Можно, запустится другой браузер. Но тебе нужно подключиться к уже запущенному, как я понял.
Ruslan
Ладно поковыряюсь еще вдруг что выйдет
Ruslan
Спасибо большое
Alhimik
Да я в антидетект работаю
Ну сам антидетект можно запустить с этим аргументом.
Ruslan
Честно я тупо из доки к браузеру взял готовый сниппет для запуска
Ruslan
Пойду гуглить
Alhimik
Честно я тупо из доки к браузеру взял готовый сниппет для запуска
Я имею ввиду что некий антидетект-браузер X, основанный на хроме, имеет те же опции что и хром, если это намеренно не удалено. Т.е. ты можешь просто использовать путь до этого браузера X в опции метода launch().
Alhimik
executablePath: "/путь/к/браузеру"
Ruslan
и потому уже через connect() открывать нужные окна браузера верно?
Alhimik
и потому уже через connect() открывать нужные окна браузера верно?
Нет, коннект не нужен. Нужно лаунч, если ты сам запускаешь браузер.
Alhimik
Если тебе нужно 3 профиля запустить то запускаешь 3 раза launch с разными каталогами профилей (userDataDir).
Ruslan
у меня профили открываются по запросу на local_api браузера
Alhimik
Ну тут не подскажу, не занимался таким.
Ruslan
Ну тут не подскажу, не занимался таким.
Понял. Все равно спасибо большое!
Ruslan
В общем ничего не хочет работать. И вообще не понятная фигня
Ruslan
Ruslan
в консоли выходит класс Frame
Ruslan
Ruslan
делаю проверку console.log(typeof (await frame2[0]));
Ruslan
выводит undefined
Ruslan
и методы у frame[0] не работают
Alhimik
делаю проверку console.log(typeof (await frame2[0]));
А почему ты считаешь что по нулевому индексу что-то должно быть? Это же не массив.
Alhimik
Судя по этому скрину это и есть фрэйм.
Ruslan
это результат вывода frame2[0]