Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 14.03.2018, 17:56
Аватар для VNad66
Новичок на форуме
Отправить личное сообщение для VNad66 Посмотреть профиль Найти все сообщения от VNad66
 
Регистрация: 14.03.2018
Сообщений: 3

Безымянный динамический Table
Доброго времени суток уважаемые гуру, профи и гости форума. Прошу Вашей помощи с извлечением содержимого безымянной (без id) динамически создаваемой и обновляемой интерфейсом роутера таблицы.

Краткое описание задачи: Есть роутер TL-WR940N (его эмулятор на оф.сайте TP-LINK). С его помощью я планирую отслеживать активность сотрудников нашей компании (их наличии в кабинете фирмы, в коридоре или же за пределами действия сети Wifi компании, т.е. не на рабочем месте). Нанимать профи я не могу позволить, мы еще молодые и бюджет свободных наличных просто не позволяет. Из всевозможных логов роутера я могу определить уровень сигнала к тому или иному устройству в сети а так же его отсутствие в таковой и т.к. роутер всего в одном помещении и на его уровень сигнала ничего из замеченного мной, не влияет, сотрудники компании в активной сети Wifi и есть доказательство что они на рабочем месте а не активничают где-то за пределами офиса. Благодаря динамич.dns мне для подключения к роутеру не требуется прямое присутствие в своей сети wifi.

Что мне удалось выяснить: Веб-интерфейс роутера имеет несколько фреймов, интересующий меня фрейм "mainFrame" (он идет по центру веб-интерфейса и отображает детали выбранного пункта настроек). Доступ к нему я получаю штатно:
var frame_details = document.getElementsByTagName("frame")[2].contentDocument;
Далее уже могу выдергивать некоторые параметры, как "версия морды" или "версия прошивки", да многое другое, по след.примерам:
var software_version = frame_details.getElementById("fversion").innerHTML;
var hardware_version = frame_details.getElementById("hversion").innerHTML;
Но есть и такие которые я не могу выдернуть т.к. они находятся в той части таблицы что не имеет свой id, генерируется самим роутером и обновляется каждые 5 секунд. Хотелось бы запарсить всю таблицу а не ее отдельные элементы, а дальше уже разбор полетов деталей. Вот пример кода генерируемого роутером, он отображает имя Wifi сети (это просто как пример из все той же таблицы)
<tr><td class="Item" id="t_name_ssid">Имя беспроводной сети (SSID):</td><td colspan="2">KafelPlitka<br></td></tr>
<tr><td class="Item" id="t_mode">Режим:</td><td colspan="2"><span id="t_11bgnm">11bgn смешанный</span></td></tr>
<tr><td class="Item" id="t_chanel_width">Ширина канала:</td><td><span id="t_automatic" name="t_automatic">Автоматический</span></td></tr>
<tr><td class="Item" id="t_channel">Канал:</td><td colspan="2"><span id="t_auto" name="t_auto">Автоматически</span> (<span id="t_cur_chl" name="t_cur_chl">Текущий канал</span> 2)</td></tr>
<tr><td class="Item" id="t_mac_addr" name="t_mac_addr">МАС-адрес:</td><td colspan="2">EC-08-6B-64-47-04</td></tr>
<tr><td class="Item" id="t_wds_status">Состояние WDS:</td><td colspan="2"><span id="t_wds_dis">Отключено</span></td></tr>
и как выдернуть эти данные я не понимаю, не могу в силу своей молодости в Javascript и прошу помощи в любом виде и форме. Поиски по id "t_name_ssid" и им подобным ни к чему ни привели

Заранее благодарен за любую помощь
Ответить с цитированием
  #2 (permalink)  
Старый 14.03.2018, 18:48
Кандидат Javascript-наук
Отправить личное сообщение для Signal Посмотреть профиль Найти все сообщения от Signal
 
Регистрация: 03.05.2016
Сообщений: 137

ты полез не в те дебри, с роутером можно работать через ssh программно и получать все необходимое оттуда, если чего-то нет, то как правильно теми же его стредствами линукс можно закинуть любую (ну все зависит от размера и версии) программу на него, зайди на свой роутер тем же путти и ты увидишь приглашение командой строки терминала линукс и вперед
Ответить с цитированием
  #3 (permalink)  
Старый 14.03.2018, 19:09
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,723

Сообщение от VNad66
Поиски по id "t_name_ssid" и им подобным ни к чему ни привели
Это как? Как вы смогли получить доступ к версии ПО, но не смогли получить поле таблицы?
Ответить с цитированием
  #4 (permalink)  
Старый 14.03.2018, 19:48
Аватар для VNad66
Новичок на форуме
Отправить личное сообщение для VNad66 Посмотреть профиль Найти все сообщения от VNad66
 
Регистрация: 14.03.2018
Сообщений: 3

Сообщение от Signal Посмотреть сообщение
ты полез не в те дебри, с роутером можно работать через ssh программно и получать все необходимое оттуда
а вот это для меня дебри да и не все от туда можно получить а заливать свой шелл теоретически найти факи в сети можно, но роутер дороже таких экспериментов
Сообщение от Nexus Посмотреть сообщение
Это как? Как вы смогли получить доступ к версии ПО, но не смогли получить поле таблицы?
Просто (из примера) по id "t_name_ssid" он возвращает дефолтное значение значение названия параметра "Имя беспроводной сети (SSID):", а не его значение "KafelPlitka", хотя оператор .innerHTML вроде должен возвращать содержимое а тип, заголовок или оператор

... я еще молод в JS, может подскажите что я делаю не так или пропустил чего?
Ответить с цитированием
  #5 (permalink)  
Старый 14.03.2018, 20:21
Кандидат Javascript-наук
Отправить личное сообщение для Signal Посмотреть профиль Найти все сообщения от Signal
 
Регистрация: 03.05.2016
Сообщений: 137

Сообщение от VNad66 Посмотреть сообщение
а вот это для меня дебри да и не все от туда можно получить а заливать свой шелл теоретически найти факи в сети можно, но роутер дороже таких экспериментов
все то, что отображается в вебе на роутере, 100% есть уже в нем линуксовыские команды для тех операций, перешивать роутер не будет надобности, ну а если с таблицей то попробуй
$('table tr').asArray()
Ответить с цитированием
  #6 (permalink)  
Старый 14.03.2018, 21:26
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от VNad66
хотя оператор .innerHTML вроде должен возвращать содержимое а тип, заголовок или оператор
Таблицу можно перетрясти тем, чем она обладает - https://learn.javascript.ru/traversi...igation-tables. Получить html элемент в ней - td.querySelector(selector), где td ячейка к которой нужно обратиться. А нужно ли искать html элемент в ячейке можно определить по типу узла в ней https://learn.javascript.ru/basic-do...D0%BF-nodetype

Можно использовать querySelectorAll() в купе c forEach().
Ответить с цитированием
  #7 (permalink)  
Старый 14.03.2018, 21:41
Аватар для VNad66
Новичок на форуме
Отправить личное сообщение для VNad66 Посмотреть профиль Найти все сообщения от VNad66
 
Регистрация: 14.03.2018
Сообщений: 3

В общем с JS-фидлером отпарсил искомый фрейм и выяснилось что там всего одна таблица, название странноватое "autoWidth" да и черт с ним. После форматирования и вычленения всего содержимого получился вполне приемлемый результат, кому интересно - вот код:
var info_frame = document.getElementsByTagName("frame")[2].contentDocument;
	var info_table = info_frame.getElementById("autoWidth");
	var info_result = info_table.innerText;  //--правда в хроме работает только .innerText
	document.write(info_result);
Но все равно, всем спасибо за подсказки и как результат - искомые данные прекрасно извлекаются

Последний раз редактировалось VNad66, 14.03.2018 в 22:20.
Ответить с цитированием
Ответ


Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Растянуть до конца странице pokk (X)HTML/CSS 18 16.01.2018 12:37
Экспорт HTML table в excel inetinf jQuery 0 24.09.2015 09:02
Событие scroll. Не цепляется строка таблицы karssen Javascript под браузер 7 15.07.2015 13:29
ALTER TABLE ADD korner Серверные языки и технологии 3 13.07.2011 15:25
Чем занимаются JS-программеры. JSTalker Оффтопик 69 02.02.2011 10:18