Anonymous
4
WEB
не сработало
WEB
(
WEB
Все таки чекает
WEB
инд. аккаунта
Tofa
Каво
Tofa
Побольше бы людей сюда, у кукловода комьюнити точно не маленькое
Tofa
Вот например у меня гениальный вопрос, мне нужно циклом создать 10 браузеров, но как к ним потом обращаться?
Tofa
обращаться к конкретному созданному
Vlad Vaviloff
Вот например у меня гениальный вопрос, мне нужно циклом создать 10 браузеров, но как к ним потом обращаться?
Можно при создании помещать браузеры в массив и потом обращаться к его элементам.
Tofa
Я только сейчас понял, а как это правильно сделать?
Tofa
У меня вот такая функция есть, получается её результат пушить в массив?
Vlad Vaviloff
У меня вот такая функция есть, получается её результат пушить в массив?
Эта функция создаёт браузер, открывает одну вкладку и отдаёт ее. Браузер потом так и будет висеть, даже после закрытия страницы, неаккуратно выходит. Я бы пушил браузеры, потом, доставая их, создавал новую вкладку, потом закрывал ее. В конце можно пройти по циклу и закрыть браузеры.
Gerrra
Вем привет! Есть код: const butts = Array.prototype.filter.call( document.querySelectorAll('div[id^="start-ads-"] + div[id^="ads_id_"]'), div => /Таймер:\s*10\s*секунд\s*$/.test(div.textContent) ).map(e => e.previousElementSibling.querySelector('span[onclick]')); Как нажать на butt[0]? Есть await page[r].click(butts[0]); но оно не работает, потому что я не очень понимаю какой тип будет на выходе и как на него нажать.
Vlad Vaviloff
Это как так?
При условии, что в butts собираются кликабельные кнопки, можно попробовать сразу нажать первую: butts[0].click() https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/click
Gerrra
При условии, что в butts собираются кликабельные кнопки, можно попробовать сразу нажать первую: butts[0].click() https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/click
Консоль ругается, так пробовал butts[0].click(); ^ TypeError: Cannot read properties of undefined (reading 'click') at getPic (C:\Users\User\Desktop\Test\aviso.js:34:12)
Gerrra
Должны быть обязательно
Gerrra
Там кнопок с нужным текстом - хватает
Gerrra
Продебажил. Таких кнопок много, но почему му то в массиве их нету, пишет undefined
Gerrra
Кто шарит за puppeteer ответьте пожалуйста.
artem
ребята подскажите пожалуйста как можно получить ссылку
artem
текущую
artem
чтобы достать из нее параметры
Andrey
В голове только ставить setRequestInterception и самому отправлять запросы, при получении ответа - сохранять куки для данной страницы, убирать их и возвращать response браузеру.
WEB
как мне
WEB
в $$eval
WEB
взять только 10 контейнеров
WEB
вродителе
WEB
?
WEB
ограничить
Alhimik
Кто шарит за puppeteer ответьте пожалуйста.
const links = await page.evaluate(() => { const links = []; for (const div of document.querySelectorAll("div.task-performer")) { for (const span of div.querySelectorAll("span")) { if (span.textContent.match(/35\sсек./)) { const a = div.querySelector("a"); if (a) { links.push(a.href); } } } } return links; });
Alhimik
Как написали выше или самому перехватывать запросы и подменять куки. Но это будет скорей всего более сложно и в реализации и по ресурсам, так что врядли что-то лучшее найдётся чем использовать разные инстансы.
Alhimik
P.S. @kek_mek_kek, в следующий раз буду вынужден забанить тебя, если снова будешь писать что-то подобное.
Alhimik
Это чат по puppeteer, для выражения своих сексуальных желаний лучше найти другой чат. 🤷🏻‍♂️
WEB
Через slice().
тИП item.slice(начальное, конечное)?
Alhimik
тИП item.slice(начальное, конечное)?
Сначала нужно будет коллекцию к массиву привести и потом слайс сделать. Например так: [...document.querySelectorAll("a")].slice(0, 10);
WEB
ааа
WEB
понял
WEB
спасибо
Alhimik
links == undefined всегда
Да, поправил. Ретёрн не там был.
Gerrra
Да, поправил. Ретёрн не там был.
Странное что то... У меня все равно undefined
Alhimik
Странное что то... У меня все равно undefined
Значит не то запускаешь. Потому что там будет всегда массив в результате. Либо пустой, либо с найденными ссылками. Там негде взяться undefined.
Gerrra
const puppeteer = require('puppeteer'); var jsdom = require('jsdom'); const { JSDOM } = jsdom; const { document } = (new JSDOM('')).window; global.document = document; var page = []; var pageSon = []; async function getPic(r) { const bro = await puppeteer.launch({headless: false}); page[r] = await bro.newPage(); await page[r].goto('https://aviso.bz/work-youtube'); await page[r].waitFor(1000); await page[r].type("#login-form > div:nth-child(2) > input", "piteronok@gmail.com"); await page[r].waitFor(1000); await page[r].type("#login-form > div:nth-child(3) > input", "123ax123"); await page[r].waitFor(1000); await page[r].click("#button-login"); await page[r].waitFor(2500); await page[r].goto('https://aviso.bz/work-youtube'); await page[r].waitFor(2000); await page[r].waitForSelector("head"); const links = await page[r].evaluate(() => { const links = []; for (const div of document.querySelectorAll("div.task-performer")) { for (const span of div.querySelectorAll("span")) { if (span.textContent.match(/35\sсек./)) { const a = div.querySelector("a"); if (a) { links.push(a.href); } } } } return links; }); pageSon[0] = await bro.newPage(); console.log(links[0]); await pageSon[0].goto(links[0]); } getPic(0);
Gerrra
Переходит кстати на пустую страницу
Alhimik
Переходит кстати на пустую страницу
Убедись что указанная выше разметка присутствует на странице в момент вызова evaluate. И что она находится не в iframe.
Gerrra
Убедись что указанная выше разметка присутствует на странице в момент вызова evaluate. И что она находится не в iframe.
Как я понял выходной тип - это массив, но он что то ругается при обращении к элементу по [0]. Я что то не допераю почему...
Alhimik
Как я понял выходной тип - это массив, но он что то ругается при обращении к элементу по [0]. Я что то не допераю почему...
Откуда ты взял имя класса task-performer? Я проверил на сайте, который у тебя в скрипте, там нет таких элементов с такими классами.
Gerrra
<div> <table id="ads-link-200982" class="work-serf"> <tbody> <tr class="ads_200982"> <td width="18"> <div class="ybprosm" title="Просмотр видео"></div> </td> <td> <div id="start-ads-200982"> <span onclick="funcjs['start_youtube'](200982, '289b14ffa65daaee8b0af37d215bbe4c', 'ads-start', 'ads');" title="https://www.youtube.com/watch?v=Tp-4bZdilLA" style="cursor:pointer;color:#006699;">стрим</span><br> <span class="serf-text">Просмотр видеоролика</span> </div> <div id="ads_id_200982" style="border-left:1px solid #608ab9; margin-left:0px; padding-left:5px; border-top:1px solid #608ab9; margin-top:5px; padding-top:5px; display: none;"> <span> № площадки: 200982<br> Дата размещения: <b>11.11.2021 в 23:04</b><br> Заказ до: 18.11.2021г. 23:05 Выполнено пользователями: 5943&nbsp;&nbsp; Таймер: <b>15</b> секунд<br> </span> </div> </td> <td align="right" width="138" nowrap="nowrap" style="text-align:right;"> <span title="Заказ до 18.11.2021г. 23:05" style="cursor: help;color:#ABB5B1;">(18.11.2021)</span> <span title="Стоимость просмотра" style="cursor:help;color:#9d0000;">0.021<span class="ruble-symbol">o</span></span> <div style="margin-top:5px;"> <span class="serf-text" style="font-size: 12px;vertical-align: middle;display: inline-block;">15 сек&nbsp;&nbsp;&nbsp;</span> <span class="vip" style="vertical-align: middle;width: 18px;display: inline-block; font-size: 14px;"><b>vip</b></span> <span class="ico ico-down" onclick="show_window('#ads_id_200982');return false;" title="Подробная информация"></span> <span class="ico ico-report" onclick="popup_w('Жалоба на Youtube, видео №200982', false, 550, 'func=youtube&amp;dop_func=ads&amp;id=200982', 'ajax/users/abuse/pop-up-abuse.php');return false;" title="Пожаловаться на площадку"></span> <a class="ico ico-remove" style="cursor: pointer;" title="Скрыть площадку" onclick="js_post(this, 'ajax/earnings/ajax-youtube.php', 'func=del-area&amp;id=200982&amp;type=ads&amp;hash=289b14ffa65daaee8b0af37d215bbe4c');return false;"></a> </div> </td> </tr> </tbody> </table> </div>
Gerrra
Я походу код элемента спутал 🙈🙈🙈🙈
Gerrra
А нет
Gerrra
Мне кажется for (const div of document.querySelectorAll("div.task-performer_time")) {, нет?
Alhimik
<div> <table id="ads-link-200982" class="work-serf"> <tbody> <tr class="ads_200982"> <td width="18"> <div class="ybprosm" title="Просмотр видео"></div> </td> <td> <div id="start-ads-200982"> <span onclick="funcjs['start_youtube'](200982, '289b14ffa65daaee8b0af37d215bbe4c', 'ads-start', 'ads');" title="https://www.youtube.com/watch?v=Tp-4bZdilLA" style="cursor:pointer;color:#006699;">стрим</span><br> <span class="serf-text">Просмотр видеоролика</span> </div> <div id="ads_id_200982" style="border-left:1px solid #608ab9; margin-left:0px; padding-left:5px; border-top:1px solid #608ab9; margin-top:5px; padding-top:5px; display: none;"> <span> № площадки: 200982<br> Дата размещения: <b>11.11.2021 в 23:04</b><br> Заказ до: 18.11.2021г. 23:05 Выполнено пользователями: 5943&nbsp;&nbsp; Таймер: <b>15</b> секунд<br> </span> </div> </td> <td align="right" width="138" nowrap="nowrap" style="text-align:right;"> <span title="Заказ до 18.11.2021г. 23:05" style="cursor: help;color:#ABB5B1;">(18.11.2021)</span> <span title="Стоимость просмотра" style="cursor:help;color:#9d0000;">0.021<span class="ruble-symbol">o</span></span> <div style="margin-top:5px;"> <span class="serf-text" style="font-size: 12px;vertical-align: middle;display: inline-block;">15 сек&nbsp;&nbsp;&nbsp;</span> <span class="vip" style="vertical-align: middle;width: 18px;display: inline-block; font-size: 14px;"><b>vip</b></span> <span class="ico ico-down" onclick="show_window('#ads_id_200982');return false;" title="Подробная информация"></span> <span class="ico ico-report" onclick="popup_w('Жалоба на Youtube, видео №200982', false, 550, 'func=youtube&amp;dop_func=ads&amp;id=200982', 'ajax/users/abuse/pop-up-abuse.php');return false;" title="Пожаловаться на площадку"></span> <a class="ico ico-remove" style="cursor: pointer;" title="Скрыть площадку" onclick="js_post(this, 'ajax/earnings/ajax-youtube.php', 'func=del-area&amp;id=200982&amp;type=ads&amp;hash=289b14ffa65daaee8b0af37d215bbe4c');return false;"></a> </div> </td> </tr> </tbody> </table> </div>
И где тут хоть одно слово performer? )
Alhimik
И зачем тебе вообще извлекать ссылку и переходить по ней на новой вкладке? Судя по верхнему спану, при клике выполняется внутренняя функция funcjs['start_youtube'](200982, '289b14ffa65daaee8b0af37d215bbe4c', 'ads-start', 'ads') которая инициализирует задание. А если ты сам переходить будешь то этого не произойдёт. Т.е. тебе нужно делать клик по этому элементу. И потом уже обращаться к открытой странице.
Gerrra
Но впринципе в идеале конечно кликать по каждой из этих штук
Gerrra
Но для этого все равно надо найти все эти кнопки
Alhimik
Но для этого все равно надо найти все эти кнопки
Ну так ищи правильно, откуда у тебя имена с performer я так и не понял. Тут тебе нужно найти table с id="ads-link-*" и потом так же всё.
Alhimik
+ мне надо еще получить эту страницу в качестве pageSon[r], а как получить ее когда она открылась - это труднее гораздо
const pages = await browser.pages(); // вернёт открытые страницы, если у тебя до клика была одна страница, то бери вторую pages[1] после клика
Gerrra
Там очень странная система кликов.
Надо дважды кликнуть чтобы перейти на нужную страницу
Gerrra
Так что это трудно, я даже не секу как это можно сделать
Gerrra
Так что это трудно, я даже не секу как это можно сделать
Она при клике меняет селектор и из за клика на селектор которого нет - кидает ошибку
Alhimik
Надо дважды кликнуть чтобы перейти на нужную страницу
А кто тебе мешает дважды клик сделать?
Alhimik
У функции click() есть опции, туда можешь передать clickCount: 2, к примеру.
Gerrra
Но тут проблем туча... 1. найти все такие элементы с 10 сек таймером
Gerrra
2. включить сам ролик
Gerrra
Потому что это не решается click)
Gerrra
Была идея чтобы питон скрипт кликал, но это уже слишком)
Alhimik
Изначально подумал что ты говоришь про событие даблклика. Ну тогда будет немного посложнее.