LINUX.ORG.RU

Перенаправление вывода браузера? другое в голову не приходит.

 ,


1

2

Есть страница интернет-телестанции, на ней скрипт (ява или пхп, или ещё что). При открытии этой страницы браузером этот скрипт отрабатывает, и формирует временную ссылку на url видеопотока, который и проигрывается в расположенном на странице видеоокошку. Эту временную ссылку можно отловить, скормить своему видеоплееру, и смотреть канал уже в нём, без веб-интерфейса.

Это удобно, но сначала нужно запустить мощную тяжёлую мозиллу с аддоном-сниффером, в окне этого аддона отыскать искомую видеоссылку, скопировать её, закрыть мозиллу, скормить скопированную ссылку плееру...

А хотелось бы так: запустить мозиллу так, чтоб её «выход» отправить не в графическое окно, а в stdout (я не владею тонкостями, так что могу слегка напутать с терминами), чтоб там регулярными выражениями выцепить из него искомый временный url.

То есть команда, в безобразном приближении, должна выглядет так:

mpv `браузер <ключи перенаправления вывода> урл_станции | grep ... | sed ... ещё что-нибудь`

Если кто-нибудь понял то, что я попытался изложить, то буду рад совету, сумбур в описании вопроса постарался минимизировать. Спасибо за внимание.

★★★★★

Последнее исправление: piyavking (всего исправлений: 3)

Ответ на: комментарий от Yorween

На стороне сервера кто/что предоставляет видеопоток? Есть сомнение, что он в любом случае сможет существовать «в вакууме», отдельно от веб-сессии. Только если веб-сайт является необязательной обёрткой над прямыми ссылками на видеопотоки.

Возможно я ошибаюсь, но иначе кто-то на стороне клиента всё равно должен держать веб-сессию и вписываться во всякие там защиты от XSRF, если они есть.

blexey ★★★★★
()

Ты уверене, что не проще будет отреверсить страницу и дёргать непосредственно нужный скрипт без привлечения жирнобраузера?

Moondancer
()
Ответ на: комментарий от blexey

Так ТС уже выдирает нужную ссылку и оно работает, просто в полуручном режиме.

Moondancer
()
Ответ на: комментарий от blexey

кто-то на стороне клиента всё равно должен держать веб-сессию

Вот и я о том же - без браузера тут, само собой, никак. Мне только нужно как-то суметь запустить его в «безоконном» режиме, чтобы просто получить код уже сгенерённой веб-страницы, со всей конкретикой, которую для этого предоставляет браузер. Я пытался это сформулировать в посте: сделать так, чтобы браузер результат своей работы по обработке страницы (с находящейся где-то внутри прямой ссылкой на поток) отправил не в движок, а, грубо говоря, в терминал, где я всякими регекспами эту прямую ссылку из этого результата вытащу. Как-то вот так.

piyavking ★★★★★
() автор топика
Ответ на: комментарий от Moondancer

было бы просто прекрасно, само собой. но у меня знаний не хватит дебажить скрипт, дёргать его, может ещё, не приведи Вселенная, какую-то среду для него эмулировать. Ладно уж, пусть жирнобраузер дёрнется - всё равно он нужен на короткий момент получения прямой ссылки, после этого мавра можно убить.

piyavking ★★★★★
() автор топика
Ответ на: комментарий от sergej

выглядит интересно, попробую, спасибо!

piyavking ★★★★★
() автор топика

ты изобретаешь youtube-dl/streamlink? Проверь, не поддерживают ли они твой сайт. Ну а вообще часто curl | grep хватает.

legolegs ★★★★★
()
Ответ на: комментарий от legolegs

за strealink был не в курсе, спасибо!

piyavking ★★★★★
() автор топика
Ответ на: комментарий от Moondancer

Я использую luakit - он достаточно headless, как по мне, но вопрос не в том, чтоб использовать максимально лёгкий браузер (всё равно он нужен только на короткий промежуток времени для формирования прямой ссылки на поток, после чего браузер прибивается), а в том, как получить результат браузерного рендеринга, чтоб его распарсить. Запуская luakit в терминале, я не вижу в выхлопе ни намёка на искомый прямой url, хотя по факту в браузере этот поток вполне себе воспроизводится.

piyavking ★★★★★
() автор топика
Ответ на: комментарий от piyavking

Запуская luakit в терминале, я не вижу в выхлопе ни намёка на искомый прямой url

С чего ты решиле, что он должен срать всеми страницами в терминал?

Moondancer
()
Ответ на: комментарий от blexey

да, хватило логики и curl.

#!/bin/bash

out="$(curl https://www.glaz.tv/popup-player/681/1/038c647c641a4dd1dd08658d6922e869/ | grep 'signature' | head -n 2 | awk -F'"' '{print $2}')"
mpv `echo -n "$out" | tail -n 1;echo "$out" | head -n 1`

безобразие, конечно, но работает. к тому же появился какой-то намёк на понимание того, что ясобирался сделать)))

piyavking ★★★★★
() автор топика
Последнее исправление: piyavking (всего исправлений: 2)
Ответ на: комментарий от piyavking

однострочник
безобразие

Пхех. Ты видале, какими извращениями с ютуба прямые ссылки выдираются, и уж тем более от всяких плееров на флеше?

Moondancer
()
Ответ на: комментарий от sergej

хм... занятная штука. я всегда хотела парсер, отвязанный от гуя. а тут люди сделали финт ушами и просто парсят выхлоп браузера :) немного странное, но вполне себе решение.

Iron_Bug ★★★★★
()
Ответ на: комментарий от Moondancer

ок, так и куда он срёт всеми страницами? и как мне в этот гипотетический бассейн пролезть с сачком?

piyavking ★★★★★
() автор топика
Ответ на: комментарий от Iron_Bug

всё-таки обрести желаемое мне помог не парсинг выхлопа браузера, а парсинг выхлопа curl'а. хотя, наверно, при желании curl можно назвать браузером)

piyavking ★★★★★
() автор топика
Ответ на: комментарий от Moondancer

не видале, до догадывеямсе. но я критикан, и я критиканствую, бггг.

piyavking ★★★★★
() автор топика
Ответ на: комментарий от piyavking

ну, курлу далеко до браузера. в том смысле, что современные сцайты иногда настолько напичканы скриптами, что курл тебе вернёт практически пустую страницу с кучей ссылок на скрипты :) в этом и проблема, собственно. если бы это был старый добрый веб времён альтависты - я бы из консоли его браузила и не мечтала бы о каком-то монстрозном парсере, который мог бы работать удалённо, или с выводом в консоль :)

Iron_Bug ★★★★★
()
Ответ на: комментарий от piyavking

и куда он срёт всеми страницами

Никуда, мало того — там и dump-режима не предусмотрено, как в w3m, например. Посему тебе и сказано — копать в сторону headless-webkit. Впрочем, можно и к luakit изи модуль сделать, который будет забирать страницу и отдавать куда надо, наверняка даже есть уже.

Moondancer
()
Ответ на: комментарий от Iron_Bug

Рано складывать руки, впереди новые челленджи — ибо сайты всё-таки (пока) пишутся людьми, а что написал человек — другой может переписать проще ;-) Написание скриптов, заменяющих жирносайты, нынче сродни написанию кейгенов — продираешся отладчиком среди тонны мути, чтобы выцепить один заветный алгоритм :3

Moondancer
()
Ответ на: комментарий от Moondancer

ну, меня не воодушевляет копание в тоннах говна. да там и алгоритмов-то никаких. ну какие алгоритмы в нынешнем вебе? там лапша и копипаста. и макаки, которые не понимают, как работает engine, который они дёргают. и куча скриптов, написанных рукожопами, которые жрут ресурсы. мне знающие люди говорили, что даже на жабаскрипте можно писать правильно и тогда он будет не таким ужасным. но, видимо, знающих людей очень мало. а остальные пишут как получится. и всё это сдобрено бодрым «надо сделать уже вчера». а на кастомизацию под юзерагента и вовсе давно насрали. поэтому качество стремится к нулю и многие сайты выглядят просто ужасно.

но самое худшее, что плодятся стандарты и реализации жабаскрипта. если бы хотя бы стандарты не менялись - тогда и браузеры бы допилили до стабильного состояния. а так говнокод в вебе умножается на глюки в браузерах и получается как-то совсем печально.

Iron_Bug ★★★★★
()
Ответ на: комментарий от crutch_master

всё обошлось малой кровью

mpv `wget -O - 'https://www.glaz.tv/popup-player/681/1/5' | grep 'signature' | head -n 2 | awk -F'"' '{print $2}'  | tac | tr -d '\n'`
piyavking ★★★★★
() автор топика
Ответ на: комментарий от Iron_Bug

Эта штука была сделана для автоматического тестирования сайтов в разных браузерах.

sergej ★★★★★
()
Ответ на: комментарий от Iron_Bug

Эх, рано я проадовался. прямой урл формируется не одним волшебным словом «signature», а ещё и другим - «nimblesessionid», который не ловится, хоть ты тресни.

А без этого nimblesessionid поток получается куцый - некоторое время проигрывает, и затыкается(

piyavking ★★★★★
() автор топика
Ответ на: комментарий от Moondancer

Впрочем, можно и к luakit изи модуль сделать, который будет забирать страницу и отдавать куда надо, наверняка даже есть уже

Я чайник, даже ключевые слова для поиска этой вещи не очень представляю, какие вбивать(

Слушай, мил человек, щёлкни гуглём, если уверен, дай линк на этот модуль!

piyavking ★★★★★
() автор топика
Ответ на: комментарий от WitcherGeralt

нет. я-то хочу вообще без браузера. то есть, *вместо* браузера парсер отдельно, без всякой гномятины и прочих безобразий. на C или на крайний случай C++. чтобы можно было, например, запускать на сервере, а где-то на клиенте получать в чистом виде html и рендерить произвольным, не привязанным к единственному гую интерфейсом. хоть в графике, хоть в консоли.

а запускалка браузера, да ещё и на жабаскрипте, да ещё и от гугл - не, это не то. от гугла вообще надо уходить постепенно. они уже начали обмазывать свой браузер баннерами (планируют урезать права adblock'ов). и это причина не доверять им и начинать сваливать с хрома. хотя он и имеет наиболее актуальный движок, но если там такие настроения, то придётся от него отказываться. вообще, копрорациям доверять нельзя никогда.

Iron_Bug ★★★★★
()
Ответ на: комментарий от Iron_Bug

я-то хочу вообще без браузера

Без браузера будет топорно, а не топорно уже будет headless браузером, как здесь.

на C или на крайний случай C++

А тебе для чего? Если просто из ненависти к другим языкам, то предлагаю тебе уже вырасти.

рендерить произвольным, не привязанным к единственному гую интерфейсом. хоть в графике, хоть в консоли

Тогда puppeteer как раз то, что тебе нужно.

да ещё и от гугл

Не понимаю какие могут быть претензии к полностью открытому Chromium.

вообще, копрорациям доверять нельзя никогда

Смотря в чём. В личном использовании опенсорсных продуктов от них не вижу никакой проблемы. А разрабатывать что-то на С# (Mono они давно под себя подмяли) или Swift, например, я бы не стал, тут действительно анальная оккупация.

WitcherGeralt ★★
()
Ответ на: комментарий от WitcherGeralt

а не топорно уже будет headless браузером, как здесь.

так он не хэдлесс, в полном смысле. у него нет собственного парсера. просто скриптами манипулируют с уже собранным стандартным браузерным бинарём, насколько я понимаю. а я хочу, чтобы в парсере не было никакой графики. чтобы можно было поставить на сервер (например, за границей) и тащить с него уже только готовый html. ну или линки на какие-то ресурсы для скачивания. для встраивания в какой-то софт, не обязательно графический. чтобы весь жабаскрипт и прочее было отделено от моего ноута, а на сервере не нужны были графические библиотеки.

А тебе для чего?

эффективность. я допускаю использование баша и перла для наколенных, чисто технических скриптов. ещё я допускаю использование lua, но тоже в строго определённых задачах. он имеет маленький футпринт и не жрёт ресурсы. но не жабаскрипт и не пистон, уж точно. этот жир нужно искоренять. и в вебе тоже.

Смотря в чём.

во всём. копроративные поделки - это бомба замедленного действия. когда ты привыкнешь пользоваться бесплатным дерьмом, они туда всунут зонды или начнут навязывать рекламу (вот как с хромом они придумали). и всё, тебе надо бежать куда-то, а некуда: все свалили на хром, альтернативы не развивались, а он вдруг оказался подставой. в этом опасность такого ПО. и это не случайность, это именно цель копрораций.

Iron_Bug ★★★★★
()
Ответ на: комментарий от Moondancer

404

File not found

The site configured at this address does not contain the requested file.

шёл бы ты в более подходящее для балаболов место, бггг. просто констатация, и просьба впредь не отсвечивать. спасибо за внимание.

piyavking ★★★★★
() автор топика
Ответ на: комментарий от Iron_Bug

просто скриптами манипулируют с уже собранным стандартным браузерным бинарём, насколько я понимаю. а я хочу, чтобы в парсере не было никакой графики.

так а нельзя эту графику с браузера как-нибудь «ободрать» (как-нибудь хитро собрать, скажем)?

ведь выпиливать - не запиливать, а опенсорс развязывает шаловливые ручки)

piyavking ★★★★★
() автор топика
Ответ на: комментарий от piyavking

нашёл, как обрести nimblesessionid, не выходя за пределы вгета с грепом, плейлист формируется, телевизор работает, я доволен.

piyavking ★★★★★
() автор топика
Последнее исправление: piyavking (всего исправлений: 1)
Ответ на: комментарий от piyavking

это будет сложно. в браузерах не предусмотрено таких опций. а если брать отдельно парсер, то всё равно надо будет всё остальное (юзерский интерфейс по отправке линков для перехода и т.д.) писать вручную. и ты будешь жёстко зависеть от релизов браузера и каждый раз тебе придётся вносить новые патчи. это грустная перспектива.

Iron_Bug ★★★★★
()
26 мая 2019 г.
Ответ на: комментарий от Iron_Bug

вопрос в некротред

а headless mode - не даст мне то, что мне нужно?

насколько я понимаю, это имитация любых действий браузера без его отрисовки. то есть можно подобрать ключик, условно говоря,

браузер --headless --ключ_чтоб_сымитировать_выполнение_браузером_скрипта_и_генерации_актуального_плейлиста

буду рад ответу, тема не перестаёт меня волновать.

piyavking ★★★★★
() автор топика

Надо понять каким образом формируется url видео. Сначала отделить общую часть url и ту которая меняется для разных видео. Потом найти запрос в ответе на который приходит недостающая часть. Потом пытаться повторить этот запрос с нужными заголовками.

Но это сработает лишь в простом случае.

Int0l ★★
()
Ответ на: комментарий от Int0l

Сработает и в общем, ведь в самом брауере оно так и происходит.

Проблема в том, что когда въебмастеры внезапно поменяют как оно работает, тебе тоже придётся всё переделывать.

anonymous
()
Ответ на: вопрос в некротред от piyavking

puppeter, а так как вариант ты можешь проигрывать видео где-то и шарить его через webrtc на другой браузер (просто что-бы ты знал что так можно)

Int0l ★★
()
Последнее исправление: Int0l (всего исправлений: 1)

Я делал скрипт, который искал в html странице новый id потока и подставлял его в mp3 плейлист. У тебя судя всего задача посложнее, надо чтобы отработал js. Ну так натрави на консольный браузер с поддержкой js, в его ответе ищи url и подсовывай плееру.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.