Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 14.09.2013, 14:39
Интересующийся
Отправить личное сообщение для Torero Посмотреть профиль Найти все сообщения от Torero
 
Регистрация: 11.03.2013
Сообщений: 20

Аддон для Firefox как парсить конкретную страницу ?
Вобщем решил написать аддон для Firefox. Потому что надо следить за количеством полученных сообщений и оперативно отвечать на них, но так как количество сообщений видно только на одной странице сайта, то она открывается довольно редко, обновляется вручную когда вспомнишь. Вообщем об оперативности небыло никакой речи. Решил написать аддон, который будет парсить страницу и выдавать количество полученных сообщений. Вот тут builder.addons.mozilla.org/ начал писать аддон.
onClick: function(event) {
                
            for (var i = 0; i < window.content.document.getElementsByTagName('li').length; i++){
             var text = window.content.document.getElementsByTagName('li')[i].innerHTML;
             if (text.search('<b>') != -1) {
                var a = text.search("<b>");
                var b = text.search("</b>");
                window.alert(text.substring(a+3, b));
             }
            }
            

        }

Таким образом я получаю количество непрочитанных сообщений, находясь на странице и нажав на кнопку виджета. А как мне получить то же самое, находясь на любой другой странице и нажав кнопку виджета?
Ответить с цитированием
  #2 (permalink)  
Старый 14.09.2013, 17:10
Профессор
Отправить личное сообщение для Яростный Меч Посмотреть профиль Найти все сообщения от Яростный Меч
 
Регистрация: 12.04.2010
Сообщений: 557

Дополнение ff может загрузить страницу с любого сайта при помощи xmlhttprequest и пропарсить полученный html.
Возможно, на том сайте информацию о непрочитанных сообщениях можно узнать при помощи некоего API (как, например, для яндекс-почты), стоит разведать на эту тему.
Ответить с цитированием
  #3 (permalink)  
Старый 14.09.2013, 17:42
Интересующийся
Отправить личное сообщение для Torero Посмотреть профиль Найти все сообщения от Torero
 
Регистрация: 11.03.2013
Сообщений: 20

вобщем на этом сайте нет ничего такого. Он вообщем простой, написан на перле. Насчет реквестов почитал, вот нашел доки
https://addons.mozilla.org/en-US/dev...k/request.html
Теперь могу получить страницу всю не как DOM а как простой текст. Но в браузере кодировки не совпадают и ромбики вижу вместо текста. Хоть в консоль вывожу хоть в алерт. Как его парсить то теперь?
Ответить с цитированием
  #4 (permalink)  
Старый 15.09.2013, 00:47
Профессор
Отправить личное сообщение для Яростный Меч Посмотреть профиль Найти все сообщения от Яростный Меч
 
Регистрация: 12.04.2010
Сообщений: 557

Сообщение от Torero
Как его парсить то теперь?
а парсить очень просто: смотришь полученный html, находишь где в нем заветное число, какой текст рядом с числом (элементы, их id, классы и т.д.), и придумываешь регулярку, которая гарантированно это число из хтмля выцепит.
Ответить с цитированием
  #5 (permalink)  
Старый 15.09.2013, 13:27
Интересующийся
Отправить личное сообщение для Torero Посмотреть профиль Найти все сообщения от Torero
 
Регистрация: 11.03.2013
Сообщений: 20

Регулярку придумал. Столкнулся с другой проблемой. При входе на сайт требуется ввод логина и пароля. При этом запрос авторизации делается с применением рандомной соли и айди юзера. Но я не могу работать со страницей как со страницей со скриптом. Я могу работать только как со страницей в обычном текстовом режиме. Вобщем я парсю соли, айди, делаю хеш, отправляю запрос на сервер, чтобы получить ответ уже для авторизированного пользователя, но почему-то сервер меня обратно выбрасывает на сраницу авторизации( Хотя хеши делаются правильно. И запрос формируется точно так же, как я его вижу в консоли фаерфокса.

var Request = require("request").Request;
    Request({
      url: "https://site/adm.pl",
      content: {q: "test"},
      onComplete: function (response) {
      window.alert(response.text);
      var saltbegin = response.text.search('salt value');
      var salt = response.text.substr(saltbegin+12, 27);
      window.alert(salt);
      var rndbegin = response.text.search('rand_login');
      var rand_login = response.text.substr(rndbegin+18, 7);
      window.alert(rand_login);
      var pass = 'password';
      var username = 'username';
      //var hashed = salt+pass;
      var query = "https://site/adm.pl?salt="+salt+"&a=enter&pp="+hex_md5(salt+" "+pass)+"&rand_login="+rand_login+"&uu"+rand_login+"="+username+"&pp"+rand_login+"=&trusted=1";
      window.alert(query);
      
            Request({
            url: query,
              content: {q: "test"},
           onComplete: function (response) {
           window.alert(response.text);
             var a = response.text.search("lft");
            window.alert(response.text.substr(a+59, 5).match(/\d*/));     
            }
           }).post();
      
      }
    }).post();


возможно, я неверным способом отправляю запрос уже сформированный?

Request({
url: query,
Ответить с цитированием
  #6 (permalink)  
Старый 15.09.2013, 15:16
Профессор
Отправить личное сообщение для Яростный Меч Посмотреть профиль Найти все сообщения от Яростный Меч
 
Регистрация: 12.04.2010
Сообщений: 557

Сообщение от Torero
возможно, я неверным способом отправляю запрос уже сформированный?
вполне возможно.

скорее всего, это должен быть запрос POST, и все значения (логин, пароль, хэш и т.д.) должны передаваться в содержимом запроса (параметр content?), а не в урле. Этот момент надо отследить в браузерном дебаггере или в фидлере.
Ответить с цитированием
  #7 (permalink)  
Старый 15.09.2013, 17:11
Интересующийся
Отправить личное сообщение для Torero Посмотреть профиль Найти все сообщения от Torero
 
Регистрация: 11.03.2013
Сообщений: 20

на сайте вот такой скрипт авторизации:

</head><body  onload="javascript: timer=setInterval('a()',1000); document.getElementById('uu9307551').focus();"><div align=center id=maindiv><div class=infomess><table class=table10><tr><td align=center valign=top><br><br><img src='/i/keyb.gif'><br><span class=error>Авторизация<br />Биллинг</span></td><td width=6>&nbsp;</td><td valign=middle align=left><div id=divsubmit><form method=get action='/cgi-bin/auth/adm.pl' onsubmit='pp.value=hex_md5(salt.value+" "+pp9307551.value); pp9307551.value=""; return true'><input type=hidden name=salt value='17494yHI0utDyp!mwov8I6U7nDA'><input type=hidden name=a value='enter'><input type=hidden name=pp value='error'><input type=hidden name=rand_login value='9307551'><table cellpadding=8 cellspacing=1><tr><td align=center colspan=2><div id=countdiv>Включите javascript</div></td></tr><tr class='row2'><td align=right>Логин:</td><td><input type=text name=uu9307551 size=30 maxlength=32 value='' autocomplete='off' id=uu9307551></td></tr><tr class='row2'><td align=right>Пароль:</td><td><input type=password name=pp9307551 size=30></td></tr><tr><td align=center colspan=2><input type=checkbox name=trusted value=1 style='border:1px;' checked> доверенный компьютер</td></tr><tr><td align=center colspan=2><input type=submit value='&nbsp;&nbsp;&nbsp;Вход&nbsp;&nbsp;&nbsp;'></td></tr></table></form></div></td></tr></table></div></div></body></html>


я могу подставить необходимые значения переменных, но как мне создать функцию?
Вариант с

function auth() = {get action='/cgi-bin/auth/adm.pl' onsubmit='pp.value=hex_md5(salt.value+" "+pp9307551.value); ....}


не прокатывает. Мог бы сделать прямо на странице все, но надо чтобы страница открытой во вкладке не держалась...
УРЛ запроса верный, но вместе с тем, это GET запрос, имеющий в себе соответствующие поля salt.value, pp9307551.value и т.д.

Последний раз редактировалось Torero, 15.09.2013 в 17:14.
Ответить с цитированием
  #8 (permalink)  
Старый 15.09.2013, 17:39
Профессор
Отправить личное сообщение для Яростный Меч Посмотреть профиль Найти все сообщения от Яростный Меч
 
Регистрация: 12.04.2010
Сообщений: 557

да, загадко..

запрос действительно должен быть GET.

могу посоветовать так:
1) убери content: {q: "test"} из запроса, все равно это не нужно.
2) значения, которые передаются в урл, на всякий случай надо эскейпить, либо функцией encodeURIComponent, либо escape
3) Request отправляется как .post(), может, надо .get()? я просто не в курсе
4) ну и реферер добавить в заголовки запроса, вдруг его проверяют.
Ответить с цитированием
  #9 (permalink)  
Старый 15.09.2013, 22:44
Интересующийся
Отправить личное сообщение для Torero Посмотреть профиль Найти все сообщения от Torero
 
Регистрация: 11.03.2013
Сообщений: 20

просто видел в отладчике что отправляется get();
первый пунк совета выполнил, второй тоже. Заголовки еще помучаю. Пока сдвигов нет (
Ответить с цитированием
  #10 (permalink)  
Старый 16.09.2013, 17:28
Профессор
Отправить личное сообщение для Яростный Меч Посмотреть профиль Найти все сообщения от Яростный Меч
 
Регистрация: 12.04.2010
Сообщений: 557

Torero,

ещё раз отследи дебаггером запрос от формы (со страницы) и твой запрос. Сравни их, найди различия (они точно есть), пробуй устранить.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Управление скроллом "а-ля тач" HonesT Элементы интерфейса 2 27.08.2013 14:25
Как сохранить быстро перезагружаемую страницу? avatator Общие вопросы Javascript 8 16.05.2013 01:39
Помогите глупенькой, как перейти на n-ную страницу сайта где джава??? nslannd Общие вопросы Javascript 12 19.04.2012 10:00
Расширение для Firefox decadent Firefox/Mozilla 1 12.05.2011 11:16
Разработка дополнений для Mozilla FireFox и ThunderBird RUVATA Общие вопросы Javascript 0 08.02.2011 15:50