Имя: Пароль:
1C
1С v8
Парсинг сайта... ПолучитьЭлементПоИдентификатору - как заставить его работать?
,
0 artist
 
30.07.14
21:52
Почему-то метод ПолучитьЭлементПоИдентификатору не хочет возвращать нужный элемент DOM...

Вот примерный код:

    СтрокаХ = "<div id='J_OrderList'></div>";
    
    ЧтениеHTML = Новый ЧтениеHTML;
    ЧтениеHTML.УстановитьСтроку(СтрокаХ);    
    
    ПостроительDOM = Новый ПостроительDOM;
    ДокументHTML = ПостроительDOM.Прочитать(ЧтениеHTML);    

    ОсновнаяТаблица = ДокументHTML.ПолучитьЭлементПоИдентификатору("J_OrderList");
    
после этого ОсновнаяТаблица = Неопределено, хотя
ДокументHTML.ПолучитьЭлементыПоИмени("div")[0].Идентификатор = "J_OrderList"


Что я не так делаю? Почему ПолучитьЭлементПоИдентификатору не находит нужный элемент?
1 artist
 
30.07.14
22:13
Ап. Неужели никто ничего не парсит?
2 artist
 
30.07.14
22:28
Видимо лучше использовать ЭлементыФормы.Сайт.Документ.getElementById("J_OrderList")
Оно хоть как-то работает...
3 trad
 
31.07.14
00:10
У меня есть пара разработок связанных с парсингом.

В одной тоже действую через Документ.getElementById, насколько помню тоже не разобрался с ПолучитьЭлементПоИдентификатору

А в другой все построено на получение узлов с помощью ВычислитьВыражениеXPath. Правда здесь пришлось html сайтов причесывать в xml с помощью tidy
4 artist
 
31.07.14
09:03
Мне кажется многовато танцев с бубнами с XPath для простого парсинга... Впринципе, сделал уже большую часть из того что надо, с помощью DOM-модели... Даже работает :)
5 Serginio1
 
31.07.14
12:02
6 artist
 
02.08.14
11:58
(5)Благодарю, но мне кажется это слишком жирно ещё и ВКшки использовать... Вроде приноровился к DOM, более-менее быстро работает, и более-менее стабильно.

А как-нибудь программно можно обновить страницу, отображаемую в ПолеHTMLДокумента на форме?

Метода Обновить у ПолеHTMLДокумента нету, у ком-объекта Поле.Документ - тоже в описании ничего нужного не нашёл.

Пробовал так:
ЭлементыФормы.Сайт.Перейти(НужнаяСтраница);
вообще ничего не происходит... видимо 1Сина анализирует текущую страниу, и если подаётся команда на переход на ту же страницу - приказ игнорируется...

Ещё так:
ЭлементыФормы.Сайт.Перейти("");
ЭлементыФормы.Сайт.Перейти(НужнаяСтраница);
Работает через раз... логику понять так и не удалось...
7 Diman000
 
02.08.14
11:59
Не буду оригинален, я тоже через getElementById делал
8 artist
 
02.08.14
12:21
Жалко что нельзя использовать селекторы а-ля CSS/JQuery, цены бы ему не было... Ведь зачастую у нужных элементов нет айдишника, но есть класс, есть вышестоящие элементы и т.д.


А что по поводу обновления поляHTML? Никто не делал?
9 artist
 
02.08.14
13:44
Апну.
Как обновить страницу в ПолеHTMLДокумента?
10 artist
 
02.08.14
22:28
Ещё разок Ап - кто знает, как обновить страницу?
11 Diman000
 
02.08.14
23:50
Я как-то обновлял, сейчас не вспомню уже. А разве у объекта IE  нет такой команды?
12 Diman000
 
02.08.14
23:50
А, тебе в ПолеHTMLДокумента, я все через браузер делал...
13 kokamoonga
 
03.08.14
06:54
(8) >>> Жалко что нельзя использовать селекторы а-ля CSS/JQuery, цены бы ему не было...

Мешают религиозные соображения или тебе просто кто-то запретил?


Процедура ПриОткрытии()
    
    ЭлементыФормы.ПолеHTMLДокумента1.Перейти("http://www.forum.mista.ru/index.php";);          
    
КонецПроцедуры


Процедура ОсновныеДействияФормыОсновныеДействияФормыВыполнить(Кнопка)
    
    document = ЭлементыФормы.ПолеHTMLДокумента1.Документ;
    
    document.parentWindow.eval("document.get_jQuery = function (selector) { return $(selector); }");
    
    document.get_jQuery("#keywords").val("Done!");
    
КонецПроцедуры


Процедура ОсновныеДействияФормыОбновитьСтраницу(Кнопка)
    
    // >>> А что по поводу обновления поляHTML? Никто не делал?
    ЭлементыФормы.ПолеHTMLДокумента1.Документ.location.reload();
    
КонецПроцедуры
14 kokamoonga
 
03.08.14
06:57
(13) + парсер как всегда пожевал ссылку
15 artist
 
03.08.14
10:59
(13)1. Я правильно понимаю, что на странице уже должен быть загружен jquery.js? И если сайт его не использует - ничего не получится?

2. За обновление благодарю, должно получиться!
16 artist
 
03.08.14
11:12
Да, точно, с обновлением получилось
17 kokamoonga
 
03.08.14
13:44
(15) >>> Я правильно понимаю, что на странице уже должен быть загружен jquery.js?

Ну если просто тупо копировать код, то понимаешь совершенно правильно.

А если немного подумать, то можно сделать так, например.


Процедура ОсновныеДействияФормыОсновныеДействияФормыВыполнить(Кнопка)
    
    document = ЭлементыФормы.ПолеHTMLДокумента1.Документ;
    
    eval_text = "
    |    var sc = document.createElement(""script"");
    |    sc.src = ""http://yandex.st/jquery/1.8.2/jquery.min.js"";;
    |    document.body.appendChild(sc);
    |    document.get_jQuery = function (selector) { return $(selector); }";
    
    document.parentWindow.eval(eval_text);
    
    document.get_jQuery("#keywords").val("Done!");
    
КонецПроцедуры
18 artist
 
03.08.14
14:10
(17)Спасибо, надо попробовать.
Неужели действительно подгрузит библиотеку...
19 kokamoonga
 
03.08.14
14:25
(18) самому не верится...
20 Serginio1
 
04.08.14
14:04
(6) Кстати это не ВК. Обычный COM который может выполняться как в 32х так и 64х разрядных процессах