![]() |
|
8.3. как найти узел html по селектору? | ☑ | ||
---|---|---|---|---|
0
SeiOkami
16.01.19
✎
13:40
|
Добрый день
Можно ли методом платформы найти в имеющимся документе HTML узел по селектору? Вижу поиск по ID и по тэгу |
|||
1
SeiOkami
16.01.19
✎
13:46
|
Есть ещё ВыражениеXPath, но оно только для DOM (
|
|||
2
SeiOkami
16.01.19
✎
13:49
|
Может как-то можно создать COM объект с полноценным JS?
|
|||
3
Юрий Лазаренко
16.01.19
✎
14:20
|
Элементы.ТвоеПолеHTMLДокумента.Документ.querySelector("input") вернет ссылку на первый input. В параметрах селектора можно указать запрос, который вернет то что надо.
|
|||
4
SeiOkami
16.01.19
✎
14:21
|
(3), это если на форме. Мне нужно в общем серверном модуле получить
|
|||
5
Юрий Лазаренко
16.01.19
✎
14:27
|
(4) А использовать DOM нельзя вместо ДокументHTML?
|
|||
6
SeiOkami
16.01.19
✎
14:28
|
(5), как например?
ПостроительDOM возвращает объект ДокументHTML. У него не нашёл поиск по селектору. Я бы мог XPath использовать (даже лучше было бы), но он только в ДокументDOM |
|||
7
Юрий Лазаренко
16.01.19
✎
14:34
|
(6) Документ создается с нуля? Или есть исходный HTML?
|
|||
8
SeiOkami
16.01.19
✎
14:38
|
Документ качаем с сайта.
|
|||
9
SeiOkami
16.01.19
✎
14:39
|
ТекстовыйДокумент = Новый ТекстовыйДокумент;
ТекстовыйДокумент.Прочитать(ПолноеИмяФайла); ДокументHTML = Новый COMОбъект("HtmlFile"); ДокументHTML.open("text/html"); ДокументHTML.write(ТекстовыйДокумент.ПолучитьТекст()); ДокументHTML.querySelector(СтрокаВыражения); РезультатВыражения = ДокументHTML.querySelector(СтрокаВыражения).href; |
|||
10
SeiOkami
16.01.19
✎
14:39
|
Пока что нашёл такой способ. Надеюсь будет работать без нюансов)
|
|||
11
SeiOkami
16.01.19
✎
14:39
|
Это не метод платформы, но деваться некуда
|
|||
12
Asmody
16.01.19
✎
14:42
|
(10) С нюансами. На linux работать не будет.
|
|||
13
Asmody
16.01.19
✎
14:44
|
(6) Из ДокументHTML можно сделать ДокументDOM через ЗаписьXML/ЧтениеXML. При условии, что html валидный.
|
|||
14
Юрий Лазаренко
16.01.19
✎
14:47
|
(13) Можно сразу читать в ДокументDOM
|
|||
15
Asmody
16.01.19
✎
14:51
|
(14) Можно. Но у меня вылезали какие-то траблы как раз из-за невалидности html. Приходилось объезжать.
|
|||
16
SeiOkami
16.01.19
✎
15:05
|
(14), а как сразу читать в ДокументDOM ?
|
|||
17
SeiOkami
16.01.19
✎
15:07
|
(13), можно пример, не совсем понимаю
|
|||
18
Мыш
16.01.19
✎
15:15
|
ЧтениеHTML = Новый ЧтениеHTML;
ЧтениеHTML.ОткрытьФайл("index.html"); ПостроительDOM = Новый ПостроительDOM; ДокументHTML = ПостроительDOM.Прочитать(ЧтениеHTML); Так? |
|||
19
SeiOkami
16.01.19
✎
15:21
|
(18), да, но это возвращает не ДокументDOM, а ДокументHTML
|
|||
20
Мыш
16.01.19
✎
15:33
|
(19) Тогда вместо ЧтениеHTML сделай ЧтениеXML
|
|||
21
SeiOkami
16.01.19
✎
15:41
|
(20), тогда падает ошибка:
Specification mandate value for attribute defer |
|||
22
Asmody
16.01.19
✎
15:42
|
Вот так у меня сделано:
ЧтениеHTML = Новый ЧтениеHTML; ЧтениеHTML.ОткрытьФайл(ИмяФайла, "UTF-8"); ПостроительDOM = Новый ПостроительDOM; ДокументHTML = ПостроительDOM.Прочитать(ЧтениеHTML); ЗаписьXML = Новый ЗаписьXML; ЗаписьXML.УстановитьСтроку("UTF-8"); ЗаписьDOM = Новый ЗаписьDOM; ЗаписьDOM.Записать(ДокументHTML.Тело, ЗаписьXML); ЧтениеXML = Новый ЧтениеXML; ЧтениеXML.УстановитьСтроку(ЗаписьXML.Закрыть()); ДокументDOM = ПостроительDOM.Прочитать(ЧтениеXML); Разименовыватель = Новый РазыменовательПространствИменDOM(ДокументDOM); ВыражениеXPath = СтрШаблон("//tr/td[@class=""%1""]/../td[@class=""%1""] | //tr/td[@class=""%1""]/../td[@class=""%2""]", КлассНомера, КлассСуммы); РезультатXPath = ДокументDOM.ВычислитьВыражениеXPath(ВыражениеXPath, ДокументDOM, Разименовыватель); ЭлементDOM = РезультатXPath.ПолучитьСледующий(); ... |
|||
23
SeiOkami
16.01.19
✎
15:44
|
(22), о, спасибо
Но, походу, HTML не соответсвует XHTML Падает с ошибкой: {ВнешняяОбработка.ТестированиеВыраженийHTML.Форма.Форма.Форма(30)}: Ошибка при вызове метода контекста (Записать) ЗаписьDOM.Записать(ДокументHTML.Тело, ЗаписьXML); по причине: Недопустимое имя XML |
|||
24
SeiOkami
16.01.19
✎
15:44
|
Вообще, речь о странице с реестром моделей ККТ на сайте ФНС
https://www.nalog.ru/rn77/related_activities/registries/reestrkkt/ |
|||
25
Asmody
16.01.19
✎
15:47
|
(24) Как минимум, там в url-е файлика бэкслеш вместо слеша.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |