artem
там надо await page.authenticate
artem
и юзера с паролем
artem
а я в ссылку в с прокси вставлял
Alhimik
а я в ссылку в с прокси вставлял
Можно и так, если это http. Обычно у прокси-провайдера есть варианты, использовать socks или http.
artem
соксы наверное
artem
но где это говорят
artem
непонятно
Alhimik
там надо await page.authenticate
С этим могут быть проблемы, например при автоматическом открытии окон. Ведь переход будет осуществлён до того как ты применишь это к новой странице. Или при перехвате запросов. Но я не знаю, можен он под капотом сам это всё делает.
Alhimik
тень а есть же библиотека какя-нибуть чтоб рандомные юзер агенты генерировать?
Зачем для этого библиотека? Просто из массива выбирай случайный элемент.
Alhimik
А зачем тебе разные UA?
artem
А зачем тебе разные UA?
хочу капчу обойти
artem
вроде если айпишник менять и юзер агент
artem
то она не вылазит
Gerrra
const btn = await page[r].waitForXPath("//div[starts-with(@id, 'start-ads-')]/span[2]"); console.log(btn == null); // Делаешь клик и ждёшь открытия новой страницы const [popup] = await Promise.all([ new Promise(resolve => page[r].once('popup', resolve)), btn.click(), await page[r].waitFor(200), btn.click(), ]); console.log(popup == null); // Работа с открытой страницей await popup.waitForXPath("//div[starts-with(@id, 'start-ads-')]/span[2]"); await popup.waitFor(2000); for (const frameLvl1 of popup.frames()) { for (const frame of frameLvl1.childFrames()) { if (!frame.url().startsWith("https://www.youtube.com")) { continue; } const playBtn = await frame.waitForXPath("//button[contains(@class, 'ytp-large-play-button')]", { timeout: 3000 }); await playBtn.click(); } } console.log("!"); await popup.waitFor(12000);
Gerrra
Открывают ничего, не включают, хотя когда ты самостоятельно кликаешь - код выполняется и btn и popup != null
Gerrra
Как я понял эти строки должны открывать по кнопке страницу и складывать в переменную popup страницу которая открылась
Alhimik
Промисы, переданные в Promise.all выполняются параллельно, они не ждут друг друга. И await внутри тоже не нужен. Эту конструкцию нужно использовать как я в примере показал, только клик и ожидание перезагрузки.
Alhimik
И не нужно таймауты использовать, есть вероятность что за 2 секунды вторая кнопка не появится и будет ошибка. 1. Нажал на первую кнопку 2. Ждёшь появления второй кнопки через waitForXPath, к примеру 3. Жмёшь вторую кнопку вместе с ожиданием открытия popup
Gerrra
то есть
Gerrra
const btn = await page[r].waitForXPath("//div[starts-with(@id, 'start-ads-')]/span[2]"); btn.click(), await popup.waitForXPath("//div[starts-with(@id, 'start-ads-')]/span[2]"); // Делаешь клик и ждёшь открытия новой страницы const [popup] = await Promise.all([ new Promise(resolve => page[r].once('popup', resolve)), btn.click(), ]); // Работа с открытой страницей await popup.waitFor(2000);
Gerrra
Не заметил
Gerrra
А чего тогда ждать?
Alhimik
А чего тогда ждать?
// Нашли первую кнопку const btn = await page[r].waitForXPath("<SELECTOR_BTN1>"); // Нажали на неё await btn.click(); // Нашли вторую кнопку const btn2 = await page[r].waitForXPath("<SELECTOR_BTN2>"); // Делаем клик и ждём открытия новой страницы const [popup] = await Promise.all([ new Promise(resolve => page[r].once('popup', resolve)), btn2.click(), ]); // Работа с открытой страницей // await popup...
Gerrra
#ads-lk-205217 > span.go-link-youtube
Gerrra
Но ай ди же не понятно брать от куда
Alhimik
Но ай ди же не понятно брать от куда
Ну ты же находишь как-то элемент, вот у него и бери id, если он тебе нужен.
Gerrra
Так?
Gerrra
const btn2 = await page[r].waitForXPath("//span[#ads-lk-(@id, 'span.go-link-youtube')]/span[2]");
Alhimik
const btn2 = await page[r].waitForXPath("//span[#ads-lk-(@id, 'span.go-link-youtube')]/span[2]");
Не знаю, проверь где ты это делаешь. Но мне кажется это невалидный xpath.
Gerrra
<span onclick="funcjs['open_window'](205286, 'ads', 'ads-205286', 'no');" class="go-link-youtube">Приступить к выполнению</span>
Gerrra
Вот элемент
Gerrra
Кидает ошибку
Gerrra
Vlad Vaviloff
https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver
Anonymous
Всем добрый вечер,проблема на сервере все время слетает пупертир
Anonymous
приходиться писать Xvfb -ac :99 -screen 0 1280x1024x16 & export DISPLAY=:99
Anonymous
есть способы фикса
Anonymous
чтобы он не слетал ?
Vlad Vaviloff
приходиться писать Xvfb -ac :99 -screen 0 1280x1024x16 & export DISPLAY=:99
Что значит "слетает"? Пробовали запускать c headless: true, чтобы не нужен был xfvb?
Андрей
Добрый день! Кто-нибудь сталкивался с проблемой: 1) Открывается браузер и начинает парсинг. 2) После открытия первого, открывается второй независимый браузер и начинает парсинг того же сайта. 3) Первый браузер завершает работу успешно, а у второго просто не загружается html. *При этом, если запустить процессы буквально одновременно, оба завершают парсинг успешно*
Vlad Vaviloff
А мне нужно false
Ок, тогда на сервере единственный способ запустить его это через xvfb. Но как понять "слетает"?
Gerrra
А как сделать так, чтобы оно находило все такие кнопки, а не только ту, в которой id = ads-lk-206793?
Sasha
Селектор
Gerrra
Селектор
#ads-lk-206723 > span.go-link-youtube
Sasha
Ну ищи по #ads-lk-
Gerrra
Ну ищи по #ads-lk-
document.querySelectorAll("#start-ads-")?
Sasha
Почитай варианты поиска
Gerrra
let elem = document.getElementById('#start-ads-'); ?
Sasha
Почитай в мануале) как искать элемент по его части.
Sasha
div [class$="-t-div"] у меня вот так ищется 1 див. Тут пере -t рандомные числа
Alhimik
приходиться писать Xvfb -ac :99 -screen 0 1280x1024x16 & export DISPLAY=:99
Не понятно что значит слетает. Если ты про export DISPLAY=:99, то можешь прописать его в ~/.bashrc.
Gerrra
Есть такой вопрос. Мне нужно получить значение ячейки <td style="width: 50px; padding: 0 20px 0 15px;"><span class="timer notranslate" id="tmr">10</span></td> в числовом виде. Делаю я это вот так вот: text = document.querySelector('timer notranslate > span').textContent; но что то не фурычит. Вот код элемента: <tr> <td height="84"> <table class="frame_table" style=""> <tbody><tr id="timer-tr-block"> <td style="width: 50px; padding: 0 20px 0 15px;"><span class="timer notranslate" id="tmr">10</span></td> <td style="width: 100%; padding: 0 20px 0 0;" align="left"> <span style="font-size: 16px; color:#FFFFFF; text-shadow: 0 1px 0 rgba(0, 0, 0, 0.9);">Пожалуйста, ждите окончания отсчета таймера</span> <div class="text-time"></div> <br> <div> Описание: Посмотреть видео<br> Ссылка на видео: <a href="/go/no_referer.php?go_url=https://www.youtube.com/watch?v=dqtTa95xo7Q" target="_blank">https://www.youtube.com/watch?v=dqtTa95xo7Q</a> </div> </td> </tr> <tr id="capcha-tr-block" style="display:none; width: 100%"> <td> <input name="hash" id="hash" type="hidden" value="820dbec142eeec2ed7ce58c2d722d8b9"> <input name="report_id" id="report_id" type="hidden" value="331619453"> <input name="timer" id="timer" type="hidden" value="10"> <input name="type_ads" id="type_ads" type="hidden" value="constructor"> </td> <td style="width: 100%; padding: 0 20px 0 15px;" align="left" id="succes-error"> </td> </tr> </tbody></table> </td> </tr>
Alhimik
Есть такой вопрос. Мне нужно получить значение ячейки <td style="width: 50px; padding: 0 20px 0 15px;"><span class="timer notranslate" id="tmr">10</span></td> в числовом виде. Делаю я это вот так вот: text = document.querySelector('timer notranslate > span').textContent; но что то не фурычит. Вот код элемента: <tr> <td height="84"> <table class="frame_table" style=""> <tbody><tr id="timer-tr-block"> <td style="width: 50px; padding: 0 20px 0 15px;"><span class="timer notranslate" id="tmr">10</span></td> <td style="width: 100%; padding: 0 20px 0 0;" align="left"> <span style="font-size: 16px; color:#FFFFFF; text-shadow: 0 1px 0 rgba(0, 0, 0, 0.9);">Пожалуйста, ждите окончания отсчета таймера</span> <div class="text-time"></div> <br> <div> Описание: Посмотреть видео<br> Ссылка на видео: <a href="/go/no_referer.php?go_url=https://www.youtube.com/watch?v=dqtTa95xo7Q" target="_blank">https://www.youtube.com/watch?v=dqtTa95xo7Q</a> </div> </td> </tr> <tr id="capcha-tr-block" style="display:none; width: 100%"> <td> <input name="hash" id="hash" type="hidden" value="820dbec142eeec2ed7ce58c2d722d8b9"> <input name="report_id" id="report_id" type="hidden" value="331619453"> <input name="timer" id="timer" type="hidden" value="10"> <input name="type_ads" id="type_ads" type="hidden" value="constructor"> </td> <td style="width: 100%; padding: 0 20px 0 15px;" align="left" id="succes-error"> </td> </tr> </tbody></table> </td> </tr>
Перед классом нужно ставить точку. И у тебя span не вложенный, а тот же у которого ты класс выбрал.
Alhimik
document.querySelector('.timer.notranslate').textContent
Alhimik
А где именно его вписать
Просто в конец файла допиши.
Anonymous
Хорошо
Anonymous
Спасибо
Anonymous
Очень помогли
Anonymous
из за чего пупертир такое может выдавать
Anonymous
когда работаю с другими сайтами
Anonymous
все хоршо