Имя: Пароль:
1C
1С v8
Парсер страниц сайта
0 Ramzes_n
 
19.11.13
22:31
Доброго времени суток.
Уже несколько месяцев назад сделал парсер для сайта.
Но вчера обработка перестала работать.

Ругается на строку:
"Для Каждого Стр из ЭлементыФормы.Сайт.Документ.body.all Цикл"

говорит что Поле не обнаружено all.
А ведь раньше работало.
Кто может подсказать, с чем это может быть связано?
1 Lionee
 
19.11.13
22:35
значит нет поля ,убрали
2 Ramzes_n
 
19.11.13
22:40
all - это ведь не Тег чтобы его убрали
3 Ramzes_n
 
19.11.13
22:58
других вариантов нет?
4 Dethmont
 
19.11.13
22:59
наверное body = неопределено?
5 Ramzes_n
 
19.11.13
23:01
body = COMОбъект
6 manyak
 
19.11.13
23:43
сайта страничка не открылась-загрузилась. вот там и пусто. проверяй readystate
7 Лаврентий Берия
 
20.11.13
00:38
DOM глянуть бы. Как ни странно, она может быть разный даже с одной и той же страницы под разными приложениями.
8 badboychik
 
20.11.13
02:00
что за мода пошла - писать на 1С парсеры сайтов
9 Ramzes_n
 
20.11.13
23:03
(6) readyState = "complete"
10 Ramzes_n
 
20.11.13
23:04
(7)  что за DOM ?
11 mdocs
 
20.11.13
23:06
(8) а что там - по сути тот же хмл особенно для парсера.
(10) объектная модель документа.
12 zakidonoff
 
20.11.13
23:07
(10) Структура реквизитов интернет-страницы, если вкратце, грубо и не придираться -)
Блин, мне тож такую штуку надо (парсер).
Не поделишься?
13 Ramzes_n
 
20.11.13
23:12
(12) вот. Процедура предопределенная, вызывается когда страница полностью загрузилась:

Процедура СайтДокументСформирован(Элемент)
    
    Если НачалиОбработку = Истина Тогда
        
        
        Для Каждого Стр из ЭлементыФормы.Сайт.Документ.body.all Цикл
            Если Стр.id = "wlt-PaymentAdminList-grid" Тогда
                Для Каждого таблица из Стр.children Цикл
                    Если таблица.tagName = "TABLE" Тогда // нашли таблицу
                        
                        Для Каждого РаделыТаблицы из таблица.children Цикл
                            Если РаделыТаблицы.tagName = "TBODY" Тогда    //нашли раздел
                                
                                Для Каждого СтрокаТаблицы из РаделыТаблицы.children Цикл
                                    Если СтрокаТаблицы.tagName = "TR" Тогда    //новая строка
                                        
                                        
                                        ДобавитьНовуюСтроку(СтрокаТаблицы);
                                        
                                        
                                    КонецЕсли;
                                КонецЦикла;
                            КонецЕсли;
                        КонецЦикла;
                    КонецЕсли;
                КонецЦикла;
            КонецЕсли;
        КонецЦикла;
        
        НомерСтраницы = НомерСтраницы + 1;
        Если НомерСтраницы > ПоследняяСтраницаПарсинга Тогда
            Предупреждение("Всё готово. Поздравляю!!!");
        Иначе
            ЭлементыФормы.Сайт.Перейти("http://.../MPaymentOrderListModel_page/"; + НомерСтраницы);
        КонецЕсли;
        
        
    КонецЕсли;    
    
КонецПроцедуры
14 Ramzes_n
 
20.11.13
23:13
затык буквально в самом начале:
раньше ведь всё работало.
Для Каждого Стр из ЭлементыФормы.Сайт.Документ.body.all Цикл
15 zakidonoff
 
20.11.13
23:13
(13) ХМ. Всё проще, чем я думал )
Спс.
16 Ramzes_n
 
20.11.13
23:26
варианты кончились?
17 zakidonoff
 
20.11.13
23:34
(16) Он видит all даже когда тегов боди вообще нет...
А отладчик что видит в боди? Какие реквизиты?
18 mdocs
 
20.11.13
23:41
как вариант убрать копрокод с циклом, заменить на человеческий
GetElementById("wlt-PaymentAdminList-grid")
19 Ramzes_n
 
20.11.13
23:51
(18) GetElementById("wlt-PaymentAdminList-grid") так получается. Но дальше опять затык:
Для Каждого таблица из Стр.children Цикл
Ошибка при получении значения атрибута контекста (children)

А это как обойти?
20 Ramzes_n
 
20.11.13
23:52
(17) много всяких реквизитов. Во многих значение "Ошибка чтения значения"
21 manyak
 
20.11.13
23:54
Для Каждого Стр из ЭлементыФормы.Сайт.Документ.body.all Цикл
замени на
Для Каждого Стр из ЭлементыФормы.Сайт.Документ.body.childNodes Цикл
22 Ramzes_n
 
20.11.13
23:57
(21) пишет: Итератор для значения не определен
23 mdocs
 
20.11.13
23:57
Если ЭлементыФормы.Сайт.Документ.GetElementById("wlt-PaymentAdminList-grid")=Неопределено тогда
Предупреждение("Ну вот нет тут такого элемента, вот ничо и не работает!!!");Возврат;
КонецЕсли;
24 Ramzes_n
 
21.11.13
00:00
(23) ЭлементыФормы.Сайт.Документ.GetElementById("wlt-PaymentAdminList-grid")    -  эта конструкция работает. Выдаёт COMОбъект. А как теперь получить в нём нужные теги?
25 zakidonoff
 
21.11.13
00:10
(24) по индексу попробуй
Х = 0;
Цикл
Попытка
GetElementById(Х)
Исключение
"Конец индексов"
прервать
КонецПопытки
КонецЦикла
Х = Х + 1;
26 zakidonoff
 
21.11.13
00:25
(24) Во, нашёл -)
Стр.document.GetElementsBytagName("TABLE")
27 Ramzes_n
 
21.11.13
10:07
Что-то странное творится. Принёс эту обработку на работу.
И на моё удивление она работает.
Т.е. старый вариант обработки работает.
Значит что-то на моём компе произошло.

Как думаете что могло произойти?
28 AndyD
 
21.11.13
10:16
(27) браузер обновился

антивирус или еще чего-нибудь
29 Ramzes_n
 
21.11.13
10:18
антивирус исключено.
Браузер обновился - ну и что? сайт то открывается в 1С
30 zakidonoff
 
21.11.13
10:23
(29) не совсем. Сайт открывает 1С через IE.
Нужно смотреть настройки осла.
Если у тебя свойства отражаются как "Ошибка чтения значения", значит 1С неадекватно забирает параметры из эксплорера
31 Ramzes_n
 
21.11.13
10:27
ок, как вариант вечером поковыряю
32 sikuda
 
21.11.13
10:27
(29) 1C тонкий клиент работает через установленный IE.
IE11 нет в списке поддерживаемых браузеров.
Ты тестер, подолжайте наблюдения.