gifts2017

Мод обработки загрузки характеристик яндекс.маркет

Опубликовал Ewgen Kiselev (ewgen87) в раздел Обработки - Обработка справочников

Обработка для загрузки характеристик товара с сервиса "Яндекс.Маркет".

С разрешения ltfriend выкладываю модификацию обработки http://infostart.ru/public/195029/ для "УТ 10.3"
Отличия: 
Поиск по наименованию номенклатуры из встроенного браузера 
Загрузка происходит как со страницы "описание" так и со страницы "характеристики". 
Картинка загружается с основной страницы товара (раньше не все картинки загружались) 
Решил проблему с часто встречающейся ошибкой: "Ошибка при разборе HTML страницы! Возможно, адрес указан не верно или изменилась разметка страницы источника."

UPD в новой обработке парсинг происходит не через запросы, а из страницы браузера

17.02.15 Переписал обработку - теперь работает с новой разметкой яндекса, но так как яндекс не на весь товар обновил разметку, то реализовал, чтобы парсер работал и со старой версией

13.04.15 поправил код. Код КнопкаВыполнитьНажатие в форме ФормаВыбораСтраницы выложил в комментариях

23.10.15 немного изменился код, подробности комментариях

19.02.16 Поправил код

Пример работы обработки: http://youtu.be/jGNKYdHXeXk

08.10.16 Поправил код, проверил работу на Internet explorex 8 и 11 

Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
Парсер характеристик яндекс.маркет
.epf 19,67Kb
08.10.16
31
.epf 6.1 19,67Kb 31 Скачать

См. также

Contragent+ 5.0 от 2 500
Подписаться Добавить вознаграждение

Комментарии

1. Яков Коган (Yashazz) 17.07.14 18:00
Советую: не качайте и не связывайтесь с подобными блоками. Стоит Яндексу поменять DOM или чуть поиграть с форматом, а они это любят делать, так все эти обработки идут в dev/null
2. Ewgen Kiselev (ewgen87) 18.07.14 10:44
(1) Yashazz, С такими убеждениями можно и в каменном веке сидеть ничего не менять. У вас есть предложение как загрузить характеристики сотней товаров, с десятками характеристик на каждый товар, при условии изменения формата страницы? По сути - обработка рабочая.
3. Дмитрий _ (luckardo) 22.07.14 01:48
4. Ewgen Kiselev (ewgen87) 23.07.14 17:46
Переработал обработку - теперь парсит сразу

Парсер характеристик яндекс.маркет(рабочая версия)
5. Ewgen Kiselev (ewgen87) 30.07.14 14:45
Если у вас ругается на "ЯчейкаТаблицы = КолонкиТаблицы.ДочерниеУзлы[2];" поставьте "ЯчейкаТаблицы = КолонкиТаблицы.ДочерниеУзлы[1];"
6. Евгений Павлов (rebellium) 15.01.15 11:58
1С 8.3.5.1098 + УТ 11.1.7.54
Не открывается обработка. Разворачивается пустая область.
7. Ewgen Kiselev (ewgen87) 15.01.15 14:54
(6) rebellium, Обработка для "УТ 10.3" для УТ 11.1.7.54 скорее всего работать не будет
8. Евгений Павлов (rebellium) 15.01.15 16:25
(7)
А поправить это можно? Прям космически важная и нужная обработка
9. Ewgen Kiselev (ewgen87) 16.01.15 13:53
(8) rebellium, Установил для пробы ут 11 - разобраться очень сложно, эту обработку переделывал для себя, а чтобы разобраться в ут 11 нужно много времени. а вот эта обработка у Вас работает: http://infostart.ru/public/153736/ ? она для УТ11
10. Евгений Павлов (rebellium) 16.01.15 14:39
(9) ewgen87,
Запускается, но выдаёт ошибку при разборе с основной страницы товара. Видимо из-за разметки Маркета. Если из страницы с характеристиками, то выдаёт ошибкуВ
{(6, 38}): Поле не найдено "ДополнительныеРеквизитыИСведения.ЭтоГруппа"
НЕ ДополнительныеРеквизитыИСведения.<<?>>ЭтоГруппа
11. Ewgen Kiselev (ewgen87) 13.02.15 23:31
Изменилась разметка в яндекс.маркет ( буду стараться переделать
12. Ewgen Kiselev (ewgen87) 17.02.15 17:46
17.02 Переписал обработку - теперь работает с новой разметкой яндекса, но так как яндекс не на весь товар обновил разметку, то реализовал что-бы парсер работал и со старой версией
13. andrey kharlamov (harlag) 04.03.15 13:09
УТ 10.3.30.1 + 17.02.2015.ЗагрузкаХарактеристикТовараСЯндекМаркет
как добавить кнопку "Поиск Яндекс.Маркет" под картинкой как на видео?
14. Ewgen Kiselev (ewgen87) 04.03.15 13:38
(13) harlag, Для этого нужно в конфигурацию встроить внешнюю обработку. В справочник Номенклатура на форме "Форма элемента" добавить кнопку. В обработчик событий кнопки добавить

ОбработкаЗагрузкаХарактеристикМаркет = Обработки.ЗагрузкаХарактеристикТовараСЯндекМаркет.ПолучитьФорму("Форма");
ОбработкаЗагрузкаХарактеристикМаркет.Номенклатура = Ссылка;
ОбработкаЗагрузкаХарактеристикМаркет.ОткрытьМодально();


15. Ewgen Kiselev (ewgen87) 13.04.15 21:40
Немного поменялся код в яндексе выкладываю код процедуры КнопкаВыполнитьНажатие в ФормаВыбораСтраницы:

Процедура КнопкаВыполнитьНажатие(Кнопка)
  ОбработкаОбъект.ВебСтраница1 = ЭлементыФормы.ПолеHTMLДокумента1.Документ.URLUnencoded;
  ОбработкаОбъект.АдресСсылка = ВебСтраница1;
  НайденнаяСсылка = Найти(ВебСтраница1,"?hid");
  НайденнаяСсылкаСтар = Найти(ВебСтраница1,"model");
  НайденнаяСсылкаШовУид = Найти(ВебСтраница1,"?hid&show-uid");

  Если НайденнаяСсылка > 0 тогда
	   АдресСсылка1 = СтрЗаменить(АдресСсылка,"?hid","/spec?hid");
  	   АдресСсылка2 = СтрЗаменить(АдресСсылка,"/spec?hid","?hid");
	   ВерсияМаркета = Истина;
  КонецЕсли;
   
  Если НайденнаяСсылкаШовУид > 0 тогда
	   АдресСсылка1 = СтрЗаменить(АдресСсылка,"?hid&show-uid","/spec?hid");
  	   АдресСсылка2 = СтрЗаменить(АдресСсылка,"/spec?hid","?hid&show-uid");
	   ВерсияМаркета = Истина;
  КонецЕсли;

  
  Если НайденнаяСсылкаСтар > 0 тогда
	   АдресСсылка1 = СтрЗаменить(АдресСсылка,"model.xml","model-spec.xml");
  	   АдресСсылка2 = СтрЗаменить(АдресСсылка,"model-spec.xml","model.xml");
	   ВерсияМаркета = Ложь;
  КонецЕсли;
  
  Если АдресСсылка1 <> АдресСсылка тогда
	  ЭлементыФормы.ПолеHTMLДокумента2.Перейти(АдресСсылка2);
	  ЭлементыФормы.ПолеHTMLДокумента1.Перейти(АдресСсылка1);
	  Предупреждение("Перенаправление на страницу характеристик. Дождитесь загрузки страницы и нажмите Ок");
  Иначе 
	  ЭлементыФормы.ПолеHTMLДокумента2.Перейти(АдресСсылка2);
	  Предупреждение("Попытка загрузки характеристик");
  КонецЕсли;
  Данные = ЭлементыФормы.ПолеHTMLДокумента1.ПолучитьТекст();
  Данные1 = ЭлементыФормы.ПолеHTMLДокумента2.ПолучитьТекст();
  выполнение = Истина;
  Закрыть();
КонецПроцедуры
...Показать Скрыть
16. Ewgen Kiselev (ewgen87) 14.05.15 10:32
UPD 14.05
Яндекс-маркет перешел на https. Для поиска по названию номенклатуры нужно в процедуре "ПриОткрытии()" заменить строку на:
ЭтаФорма.ЭлементыФормы.АдресСсылки.Значение = "https://market.yandex.ru/search.xml?&text=" + Номенклатура.Наименование;
17. Ewgen Kiselev (ewgen87) 23.10.15 22:35
UPD 23.10

У Яндекса очередное "супер-мега" обновление:
в названии класса добавилось слово -wrap:
layout__col layout__col_size_p75 product-spec-wrap

Найти в конфигураторе: product-spec
Заменить на: product-spec-wrap
18. Ewgen Kiselev (ewgen87) 19.02.16 17:29
UPD 19.02.2016

При точном наименовании номенклатуры (таким-же как в яндекс.маркет) страница переходит сразу в описание, но адресная строка немного другая. Поправил. Должно работать.

Процедура КнопкаВыполнитьНажатие(Кнопка)
  ОбработкаОбъект.ВебСтраница1 = ЭлементыФормы.ПолеHTMLДокумента1.Документ.URLUnencoded;
  ОбработкаОбъект.АдресСсылка = ВебСтраница1;
  НайденнаяСсылка = Найти(ВебСтраница1,"?hid");
  НайденнаяСсылкаСтар = Найти(ВебСтраница1,"model");
  НайденнаяСсылкаШовУид = Найти(ВебСтраница1,"?hid&show-uid");
  НайденнаяСсылкаРедир = Найти(ВебСтраница1,"?was_redir=1&hid");

  Если НайденнаяСсылка > 0 тогда
	   АдресСсылка1 = СтрЗаменить(АдресСсылка,"?hid","/spec?hid");
  	   АдресСсылка2 = СтрЗаменить(АдресСсылка,"/spec?hid","?hid");
	   ВерсияМаркета = Истина;
  КонецЕсли;
   
  Если НайденнаяСсылкаШовУид > 0 тогда
	   АдресСсылка1 = СтрЗаменить(АдресСсылка,"?hid&show-uid","/spec?hid");
  	   АдресСсылка2 = СтрЗаменить(АдресСсылка,"/spec?hid","?hid&show-uid");
	   ВерсияМаркета = Истина;
  КонецЕсли;

  
  Если НайденнаяСсылкаСтар > 0 тогда
	   АдресСсылка1 = СтрЗаменить(АдресСсылка,"model.xml","model-spec.xml");
  	   АдресСсылка2 = СтрЗаменить(АдресСсылка,"model-spec.xml","model.xml");
	   ВерсияМаркета = Ложь;
  КонецЕсли;
   
  Если НайденнаяСсылкаРедир > 0 тогда
	   АдресСсылка1 = СтрЗаменить(АдресСсылка,"?was_redir=1&hid","/spec?hid");
  	   АдресСсылка2 = СтрЗаменить(АдресСсылка,"?was_redir=1&hid","?hid");
	   ВерсияМаркета = Истина;
  КонецЕсли;
  
  Если АдресСсылка1 <> АдресСсылка тогда
	  ЭлементыФормы.ПолеHTMLДокумента2.Перейти(АдресСсылка2);
	  ЭлементыФормы.ПолеHTMLДокумента1.Перейти(АдресСсылка1);
	  Предупреждение("Перенаправление на страницу характеристик. Дождитесь загрузки страницы и нажмите Ок");
  Иначе 
	  ЭлементыФормы.ПолеHTMLДокумента2.Перейти(АдресСсылка2);
	  Предупреждение("Попытка загрузки характеристик");
  КонецЕсли;
  Данные = ЭлементыФормы.ПолеHTMLДокумента1.ПолучитьТекст();
  Данные1 = ЭлементыФормы.ПолеHTMLДокумента2.ПолучитьТекст();
  выполнение = Истина;
  Закрыть();
  КонецПроцедуры
...Показать Скрыть
19. Сергей Инкогнито (graf1976) 07.09.16 14:33
Обработка актуальная? Появилась потребность
20. Ewgen Kiselev (ewgen87) 07.09.16 14:50
(19) graf1976, Сегодня проверял - работает, правда желательно пользоваться совместно с обработкой http://infostart.ru/public/14986/ (бесплатная). Так как тут в этой обработке нет проверки на существование такой-же характеристики в реестре, поэтому создается новая, а это нагружает базу. Времени запилить проверку пока нет, поэтому пользуюсь той обработкой для поиска и замены дублей (Объект поиска: СвойстваОбъектов -> по наименованию)
21. Ewgen Kiselev (ewgen87) 19.09.16 15:33
19.09 Сегодня заметил, что я.маркет переделал страницу. Как будет время, постараюсь переделать
22. Василий Пупкин (teomen_) 21.09.16 11:32
Автор когда будет время поправить обработку ?
23. Ewgen Kiselev (ewgen87) 08.10.16 09:54
(22) teomen_, Поправил обработку, работает с Internet Explorer 8 и 11 (на других не проверял)
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа