Bogdan
ну опции не обязательно
GamiD
не по координатам хрень полная
Назар
🅰️nimeCoder
Ну обычно открывается панель разработчика, и отладчик / вкладка network, ставятся breakpoint'ы на потенциальные места.
Например если это регистрация, открываешься консоль ставится presist logs, делаешь регистрацию, смотришь network, находишь запрос с введенными данными, если все просто и шифров нету - повторяешь, в ином же случае на основании формата запроса делаешь глобальный поиск по JS, находишь точку отправки, смотришь как формируется запрос, если же код обфусцирован, ставишь брейкоинты, и смотришь пошагово, что как там происходит / меняешь данные «на лету»
Обычно почти все сайты очень простые, даже если там есть какой то антифрод, исключение крупные компании по типу alibaba (и все ее детища типа taobao и прочих сайтов которые использую Alibaba cloud и их технологии), ну или какой нибудь тикток (в прочем все то китайские сервисы) особенно в мобильных приложениях у них часто валом говна и шифров
🅰️nimeCoder
Источники запроса можно смотреть в вкладке стектрейса
Назар
ну это понятно, и я делал даже, ничего не нашел. А без вебдрайвера это как?
🅰️nimeCoder
ну это вот и без вебдрайвера)
🅰️nimeCoder
а что ты не нашел?
Sasha
Народ. А есть ли какие аналоги proxy-chain чтобы была возможность кешировать ssl трафик через расшифровку и подпись своим сертификатом?
Назар
а что ты не нашел?
вообще ничего не нашел. Там мало джс кода на том сайте, не знаю как ловят. Это онлайн игра, я думаю они просто видят что 1 комп играет 24х7 и на основании этого банят.
Назар
еще может потому что я не сижу в игре просто на открытой вкладке, а открываю игру, делаю дела и закрываю. Как бот кароче
GamiD
Можно выбрать select по index?
Bogdan
GamiD
Bogdan
Array.from(….)[index]
GamiD
Bogdan
код покажи
GamiD
код покажи
<select id="selectID">
<option value=”GR”>Green</option>
<option value=”YE”>Yellow</option>
<option value=”BL”>Black</option>
</select>
Bogdan
ну парсишь как?
Bogdan
await page.evaluate(() => Array.from(document.getElementById('selectID').options)[INDEX]))
GamiD
А без evaluate можно?
Bogdan
через get property
Bogdan
https://pptr.dev/#?product=Puppeteer&version=v14.4.0&show=api-jshandlegetproperties
Bogdan
https://pptr.dev/#?product=Puppeteer&version=v14.4.0&show=api-elementhandlegetproperties
GamiD
GamiD
Спасибо
GamiD
Array.from
обязателен?
Bogdan
попробуй
Bogdan
по индексу не помню но .map например не будет работать без Array.from
Bogdan
индекс тоже поидеи не будет
Bogdan
только в начале попробуй лучше как я написал, а уже потом передавай параметром селект
Bogdan
и return не забудь)
GamiD
GamiD
Не выбирает
GamiD
document.getElementById('selectvalue').options[3].selected=true
GamiD
Вот так правильно будет
GamiD
document.getElementById('selectvalue').options.selectedIndex=1 или так
Bogdan
document.getElementById("cars").options[1]
Bogdan
попробовал так работает
GamiD
Bogdan
кстати да в таких случаях Array.from не нужен, это когда наприме Array.from($(‘ul > li’)).map(x => ….)
GamiD
const element = await page.$x("//div[@class='RNNXgb']");
await element.screenshot({path: 'google.png'});
GamiD
Что тут не так?
GamiD
Bogdan
$x -> возвращает array
Bogdan
const [element] = await page.$x("//div[@class='RNNXgb']");
Bogdan
попробуй
GamiD
GamiD
await element[0].screenshot({path: './google.png', type: 'jpeg'});
GamiD
вот так работает
GamiD
Как сделать click если iframe внутри iframe?
С помощью
frame.click
GamiD
https://mosburnfat.biz/test2/index.html
Вот пример как кликнуть внутри сайта logrocket
GamiD
var iframeHandle1 = await page.$('iframe#frame1');
var contentFrame1 = await iframeHandle1.contentFrame();
var iframeHandle2 = await contentFrame1.$('iframe#frame2');
var contentFrame2 = await iframeHandle2.contentFrame();
Есть другой метод кроме этого?
Roman
GamiD
GamiD
Roman
GamiD
Roman
Есть пример?
В первой строчке гугла
https://www.tabnine.com/code/javascript/functions/puppeteer/Page/frames
GamiD
GamiD
Как переключиться между вкладками?
GamiD
Так же закрыть вкладку по index
GamiD
const page1 = await browser.newPage();
await page1.goto('https://www.google.com');
const page2 = await browser.newPage();
await page2.goto('https://www.bing.com');
await page1.bringToFront();
await page2.bringToFront();
await page1.bringToFront();
GamiD
Нашел такой вариант но он не совсем подходит под мои задачи
GamiD
Нужно чтоб работал именно с одним page
в selenium переключался так
window_list = driver.window_handles
driver.switch_to_window(window_list[index])
GamiD
Придумал вот такое решение
var page2 = await browser.newPage();
var page = page2
await page.bringToFront();
await page.goto('https://www.google.com');
var page3 = await browser.newPage();
var page = page3
await page.bringToFront();
await page.goto('https://yandex.ru');
GamiD
Щас вопрос другой как переключиться к другой вкладке который открылся через click target="black"
GamiD
Нашел решение вдруг кому нужно будет
var pages = await browser.pages();
var page = await pages[0]
await page.bringToFront();
var page = await pages[1]
await page.bringToFront();
Таким образом можно переключиться на любую вкладку по index
Британец
Британец
Посоветуйте книги по node js
Британец
Хотя наверно не по node js а просто js
GamiD
GamiD
Как работать с браузером в несколько потоков?
Когда браузер не активный не кликается пока не будет активным что можно с этим сделать?
Bogdan