Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Работа с сайтом в 1с (DOM)

Работа с сайтом в 1с (DOM)
Я
   VitaliyTokarev
 
22.01.21 - 09:51
Пытаюсь парсить сайт через "Поле HTML документа".
Дошёл до пути типа:

ЭтаФорма.Элементы.Страничка.Документ.children.0.children.1.children.2.children.1.children.1.children.2.children.1.children.1.children.0

Параллельно создаю структуру:
СтруктураСтраницы.document.HTML.BODY.MAIN.DIV[1].DIV.DIV[2].DIV[1].DIV[1].FORM

На этой форме нужно заполнить логин пароль и нажать кнопку "Войти". Как это сделать програмно не останавливая парсинг и не делая это руками на форме? Вопрос не про загрузку данных с GET и POST.

<form id="login-form" action="/user/login" method="post">
<input type="hidden" name="_frontendCSRF" value="xUH58yo1NEeBo831...">            <div class="form-group field-loginform-login required">
<label class="control-label" for="loginform-login"><span class="glyphicon glyphicon-user"></span> Логин</label>
<input type="text" id="loginform-login" class="input-lg form-control" name="LoginForm[login]" maxlength="50" placeholder="Обычно совпадает с номером договора" autofocus="autofocus" onfocusout="clearLogin($(this), &quot;/user/filter-login&quot;)" tabindex="100" aria-required="true">

<p class="help-block help-block-error"></p>
</div>            
                        <div class="form-group field-loginform-password required">
<label class="control-label" for="loginform-password"><span class="glyphicon glyphicon-lock"></span> Пароль</label><span class="pull-right"><a class="small" href="/user/forgot-password" maxlength="50" tabindex="104">Забыли пароль?</a></span><input type="password" id="loginform-password" class="input-lg form-control" name="LoginForm[password]" maxlength="50" placeholder="Ваш пароль" tabindex="102" aria-required="true"><p class="help-block help-block-error"></p>
</div>            
            <div class="form-group field-loginform-rememberme">
<div class="checkbox">
<label for="loginform-rememberme">
<input type="hidden" name="LoginForm[rememberMe]" value="0"><input type="checkbox" id="loginform-rememberme" name="LoginForm[rememberMe]" value="1" checked="" tabindex="103">
Запомнить меня
</label>
<p class="help-block help-block-error"></p>

</div>
</div>            <button type="submit" class="btn btn-lg btn-block btn-primary" name="login-button" tabindex="105">Войти</button>            </form>
   Юрий Лазаренко
 
1 - 22.01.21 - 10:30
(0) Если ты уже работаешь с полем html-документа, то ты уже на клиенте, а значит, у тебя есть javascript. Заполни логин и пароль яваскриптом и кликни кнопку. Примеров в интернете полно, вот один: http://catalog.mista.ru/public/338126/
   VitaliyTokarev
 
2 - 22.01.21 - 10:33
(1) О, спасибо, в сторону JavaScript не смотрел
   Юрий Лазаренко
 
3 - 22.01.21 - 10:34
Если кратко, то делаешь:
document.getElementById("loginform-login").value = <Твой логин>
document.getElementByClassName("login-button")[0].click()
   Юрий Лазаренко
 
4 - 22.01.21 - 10:35
Точнее
document.getElementById("loginform-login").value = <Твой логин>
document.getElementById("loginform-password").value = <Твой пароль>
document.getElementByClassName("login-button")[0].click()
   VitaliyTokarev
 
5 - 22.01.21 - 10:36
(4) Огромное спасибо!
Дальше уже разберусь.
   Юрий Лазаренко
 
6 - 22.01.21 - 10:37
(5) Не во что
   VitaliyTokarev
 
7 - 22.01.21 - 11:02
(6) Ахаха, а не тут-то было))))

getElementById - Это он прожевал, а getElementByClassName - нет...

{Обработка.имПарсинг.Форма.Форма.Форма(111)}: Метод объекта не обнаружен (getElementByClassName)
        Кнопка = ДокументДляПарсинга.getElementByClassName("login-button");
   VitaliyTokarev
 
8 - 22.01.21 - 11:08
Если что, платформа последняя (8.3.18 с чем-то), а вот УТ 10.3 в режиме совместимости 8.2.13
   acht
 
9 - 22.01.21 - 11:14
(7) Потому что оно getElementsByClassName ахаха
   VitaliyTokarev
 
10 - 22.01.21 - 11:27
(9) А, ок)))

А я уже вот так сделал ещё:

        Логин = ДокументДляПарсинга.getElementById("loginform-login");
        Пароль = ДокументДляПарсинга.getElementById("loginform-password");

        ЛогинФорм = ДокументДляПарсинга.getElementById("login-form");
        Кнопка = ЛогинФорм[5];

        Логин.value = "блаблабла";
        Пароль.value = "блаблабла";
        Кнопка.click();
   Юрий Лазаренко
 
11 - 22.01.21 - 12:49
(10) Но только смотри, если в форму добавят/удалят элементы, то Кнопка = ЛогинФорм[5]; вернет другой элемент.
В (4) я неправильно написал, должно быть
document.getElementsByName('login-button')[0]
   VitaliyTokarev
 
12 - 27.01.21 - 09:29
Ещё вопрос возник.
Человек нажал на что-то. В 1С у документа возникло событие "ПриНажатии".
А как понять на какой объект на страничке он нажал?
   Малыш Джон
 
13 - 27.01.21 - 09:40
(12) ТекущийЭлемент у Формы
   VitaliyTokarev
 
14 - 27.01.21 - 09:45
(13) Текщим элементом является сама строка, которая и есть "Поле HTML документа". А мне нужно что именно в этом самом документе нажали
   VitaliyTokarev
 
15 - 27.01.21 - 12:02
Нет специалистов? ))))))))
   MyNick
 
16 - 27.01.21 - 12:04
(0) жмем в браузере F12, вкладка network. Вбиваем лохин, пасворд, жмем куда надо. Смотрим заголовок и тело post запроса.
Делаем то же самое на 1С.
Накуа тебе парсинг...?
   VitaliyTokarev
 
17 - 27.01.21 - 12:26
(16) С пассвордом разобрался. Вопрос другой. Человек работает как в браузере и кое-что смотрит напрямую на форме 1С, как отследить куда нажал?
   PloAl
 
18 - 27.01.21 - 12:52
(12) Во втором параметре события ПриНажатии - ДанныеСобытия.Element

Список тем форума
 
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.