Javascript.RU

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

Получить данные из html страницы.
Я получаю страницу через XMLHttpRequest

Это отрывок из неё, т.е. строка, которую мне нужно получить:
<font class="playersonline">
   <span class="txtdet">
      <b>
         Сейчас в игре 5,822 игрока.
      </b>
   </span>
</font>


Я всё это делаю поиском, копированием, удалением, с кучей переменных...
В общем мне этот способ не очень нравится:
function authorized()
{
	var xhr = new XMLHttpRequest()								// Создать объект
	xhr.withCredentials = true									// Передать куки и параметры авторизации от клиента
	xhr.onreadystatechange = function()							// Назначить обработчик запроса
	{
		if(xhr.readyState == 4)									// Запрос завершен и ответ готов
		{
			if(xhr.status == 200)								// Успешный запрос
			{
				var html = xhr.responseText						// Получить страницу в тексте
				
				if(html.indexOf('LOGIN_redirect value') != -1)	// Если есть форма авторизации
				{
					var s = html.indexOf('Сейчас в игре ') + 14	// Найти начало
					var e = html.indexOf(' игрок')				// Найти конец
					var n = html.substring(s, e)				// Скопировать значение
					var num = parseInt(n.replace(/,/g, ""), 10)	// Удалить запятую из цифр и перевести из текста в число
					var str = 'Сейчас в игре ' + n + ' игрок'	// Формирование новой строки

					// Правильное окончание начало
					var v = num % 100
					
					if(v > 10 && v < 20) str += 'ов.'
					else
					{
						v = num % 10
						if(v == 1) str += '.'
						else if(v > 1 && v < 5) str += 'ка.'
						else str += 'ов.'
					}
					// Правильное окончание конец

					localStorage['player_online'] = str	// Записать всю строку в память
				}
			}
		}
	}
	xhr.open('GET', 'http://www.site.ru/home.php', true)		// Конфигурация запроса
	xhr.send()													// Отправить запрос
}


Есть же какие - то функции специальные чтобы просто получить значение в тегах?
Ответить с цитированием
  #2 (permalink)  
Старый 02.10.2016, 17:08
Профессор
Отправить личное сообщение для Артист Посмотреть профиль Найти все сообщения от Артист
 
Регистрация: 25.09.2016
Сообщений: 163

Что - нибудь типа:

document.querySelector('font[class="playersonline"]')


Только document я так понял означает текущую страницу?

А так можно?
xhr.querySelector('font[class="playersonline"]')

И как потом пропустить это: <span class="txtdet"> и <b> ?

.innerHTML - получить то что в тегах.

Вот так будет работать, или это чушь?
xhr.querySelector('font[class="playersonline"]').querySelector('b').innerHTML

Или так:
xhr.querySelector('font[class="playersonline"]').getElementsByTagName('b').innerHTML

Последний раз редактировалось Артист, 02.10.2016 в 17:14.
Ответить с цитированием
  #3 (permalink)  
Старый 02.10.2016, 17:20
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,589

Страницы в интернете - просто текст, пока браузер не превратит их в сложную структуру DOM.
XHR как раз и получает этот текст. Вы можете преобразовать вручную его в целиком в DOM, но в вашем случае это бессмысленная трата времени и вычислительных ресурсов: поиск строк стократ быстрее. Это имеет смысл только если вам нужно вытаскивать множество сложноструктурированных данных.
__________________
29375, 35
Ответить с цитированием
  #4 (permalink)  
Старый 02.10.2016, 17:52
Профессор
Отправить личное сообщение для Артист Посмотреть профиль Найти все сообщения от Артист
 
Регистрация: 25.09.2016
Сообщений: 163

Спасибо ))
Т.е. лучше так оставить?
Ответить с цитированием
  #5 (permalink)  
Старый 02.10.2016, 17:57
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,589

Сообщение от Артист Посмотреть сообщение
Т.е. лучше так оставить?
Если нужна только эта строчка или ещё парочка других, то да.
Разве что микрооптимизировать,
var e = html.indexOf(' игрок')
->
var e = html.indexOf(' игрок', s) //поиск с предыдущей позиции
__________________
29375, 35
Ответить с цитированием
  #6 (permalink)  
Старый 02.10.2016, 18:24
Профессор
Отправить личное сообщение для Артист Посмотреть профиль Найти все сообщения от Артист
 
Регистрация: 25.09.2016
Сообщений: 163

Спасибо )

Додумался как проще сделать:
location.href = "authorized.html"

var s = html.indexOf('Сейчас в игре ')
var e = html.indexOf(' игрок', s) + 7

if(html[e] == '.') e += 1 // игрока.
else if(html[e + 1] == '.') e += 2 // игроков.

localStorage['player_online'] = html.substring(s, e)
Ответить с цитированием
  #7 (permalink)  
Старый 04.10.2016, 05:46
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,589

Это не будет работать.
После
location.href = "authorized.html"
будет переход на другую страницу и весь последующий код исполнен не будет, т.к. останется на предыдущей.
__________________
29375, 35
Ответить с цитированием
  #8 (permalink)  
Старый 04.10.2016, 16:40
Профессор
Отправить личное сообщение для warren buffet Посмотреть профиль Найти все сообщения от warren buffet
 
Регистрация: 08.07.2016
Сообщений: 1,332

По-моему не останется. Предыдущая страница разве не умирает? )
Ответить с цитированием
  #9 (permalink)  
Старый 04.10.2016, 16:54
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,589

Сообщение от warren buffet Посмотреть сообщение
По-моему не останется. Предыдущая страница разве не умирает? )
Одно другому не мешает. Останется и умрёт вместе с ней. Как верный самурай.)
__________________
29375, 35
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Получить данные с другой страницы в фору DDSSDD Серверные языки и технологии 0 09.04.2013 16:52
Получить данные ajax запросом mue Общие вопросы Javascript 2 17.12.2012 12:49
Как получить данные из opener в open melihovgv Javascript под браузер 1 07.12.2012 10:36
получить данные из iFrame на другом домене qwert_ukg Общие вопросы Javascript 1 15.09.2012 15:34
Получить html код удаленной страницы AntonP Общие вопросы Javascript 19 02.05.2012 16:15