Alex*
Sasha
Просто это селектор текста внутри)
Alex*
Просто это селектор текста внутри)
Если надо найти элемент по содержимому в элементе, иногда приходится выбрать все по классу или тегу и затем отфильтровать по содержимому. Как-то так.
Sasha
Само поле чуть выше по уровню
artem
ребята а я могу как-то открыть дискорд пупетиром?
artem
оно же как полу браузер
Timur
artem
можешь
подскажите пожалуйста как
Timur
artem
artem
нет я имею мне нужно само приложение
artem
браузерная версия меня не интересует
Timur
а разница в чем?
artem
разницы нет
Timur
ну тогда ни чем не могу помочь
artem
но мне хочется узнать можно ли открывать подобные приложения пупетиром
artem
не у всех приложений есть браузерные аналоги
Alhimik
Eugene
Ребят, кто-то писал что-то по поведенческим факторам? Надо заходить на сайты и делать рандомные действия. Кто может быстро что-то накатать или может у кого-то есть готовое
1
Подскажите, как нажать на Radio кнопку если имя селектора каждый раз разное? Меняются каждый раз 5 букв в квадратных скобках [hgxwm]. Выбрать нужно из нескольких кнопок.
<div class="iradio icheck-item icheck[hgxwm] icheck-area-20" style="position: relative;"><input type="radio" name="answer" id="answer_completed_ds_form" value="completed_ds_form" class="icheck-input icheck[hgxwm]"></div>
пробовал так
await page.click('#formContent > form > fieldset > label.icheck-label.icheck\\[xmnuw\\] > span');
пробовал так
const checkbox = await page.$$('.iradio icheck-item');
await checkbox[1].click(); или await page.click(checkbox[1]);
UPD. В итоге нашёл решение через XPATH
const checkbox = await page.$x('//*[@id="formContent"]/form/fieldset/label[2]/div');
await checkbox[0].click();
Sasha
Почитайте про варианты фильтрации в селекторах. Там можно указывать поиск по шаблону. Статик часть и та часть что может быть изменена
Alex*
Sasha
Есть селектор под динамическую часть. Бывает t-dev-134567 и где цифры меняются рандомно. То можно искать элемент с указанием того что его часть может быть числовой
Alex*
Alex*
Sasha
) бежать) в ужасе)
Alhimik
Цепляться через XPath по содержимому.
🐽 Alex
Можно использовать nth child
🐽 Alex
В любом случае структура div особо не меняется, можно понять какой по счету идёт элемент
Alhimik
Если не секрет, что это за сайт? Или хотя бы что за движок используется?
Это намеренная обфускация классов для защиты от ботов или просто рандомизация имён классов?
Alex*
Перебирать элементы по тегу и смотреть из чего он состоит, что содержит.
Alex*
🐽 Alex
По regex ещё можно
Alex*
По regex ещё можно
Нужен именно элемент, а не текст или значения атрибутов.
Например input, чтобы ввести данные.
🐽 Alex
То есть для массива div получить innerText и сопоставить
Alex*
Alex*
Alhimik
Alhimik
Иногда вижу что используют клик внутри страницы, зачем так делать? Ниже вижу закомментирована строка button.click(), что-то не работает?
Alex*
Alex*
Alex*
Я не могу рассчитывать, что не поменяется class.
Alhimik
Так же по любым атрибутам. Если даже они не статичные, то можно зацепиться за начало, конец, длину атрибута и т.д., например:
<div class="buttons">
<button class="btn-start-a">A</button>
<button class="btn-start-b">B</button>
</div>
"//button[starts-with(@class, 'btn-start-')]"
Alhimik
Или вообще:
"//button[contains(., 'Купить')]"
Alhimik
Содержимое практически никогда не меняется, особенно у ключевых элементов, ссылки, кнопки и т.д. Я стараюсь не использовать классы вообще.
Alhimik
Даже для мультиязычных сайтов довольно просто использовать xpath:
"//button[contains(., 'Купить') or contains(., 'Buy')]"
Не понимаю почему до сих пор кто-то не использует его? 😂
Alex*
Почему я пришел к выводу что по контенту надежнее и делаю перебор.
Потому что страницы меняются - и пару новых div ломают расположение элементов и соответственно селектор не отработает.
А надо гарантированно ввести определенные данные в определенное поле.
Поэтому я вижу кнопку сохранить - я именно ее найду. Мало того я еще проверю кто у нее родители. )
Alex*
Alhimik
Alhimik
https://devhints.io/xpath
Alhimik
Начни отсюда.
Alhimik
Alex*
Я видел много ресурсов и расширения стоят на Хроме. Но однажды во что-то уперся. А надо было срочно. Потом наработал практики и шаблоны решений. Ну и забил него. Очевидно пришло время вернуться. )
Alex*
Игорь
page.on('requestfailed' - net::ERR_ABORTED , как правильно обрабатывать 302 редиректы ?
Игорь
как надежнее эмулировать браузер чтобы не банили
Игорь
как правильно распараллелить puppeteer на несколько потоков (процессоров) чтобы запросы не блокировались ?
Игорь
как эффективно иcпользовать io и cpu ?
Игорь
как исправить ошибку waiting for selector failed: timeout 30000ms exceeded
Alhimik
Alhimik
Vlad Vaviloff
Николай
привет, кто знает как победить:
// меняю href одной ссылки на странице на свою
await page.evaluate((replaceHref) => {
document.querySelector('div[data-role="paginationBottom"] a[rel="next"]').href = replaceHref;
}, url.href);
// жду клик и загрузку страницы после
await Promise.all([
page.click('div[data-role="paginationBottom"] a[rel="next"]'),
page.waitForNavigation({
waitUntil: 'networkidle2',
timeout: 0
}),
]);
в результате грузится старая ссылка.. не могу понять почему
Светлана
Alhimik
nevermind
hi, im using
await page.goto(currentLink, {
waitUntil: "networkidle2",
timeout: 0,
});
but app is crashing at cloud. there is no problem at local...
how can i solve this problem....