Имя: Пароль:
1C
1С v8
Из 1с нажать на кнопку HTML
,
0 CnupT45rus
 
29.04.15
07:45
Приветствую друзья.
Как можно из 1С нажать на кнопку в html?


Всем заранее благодарен :)

Код html:
<center>
<form name=form action="index.php" method="POST">
<table><tr><td>
<font size="-1">text1</font><br><textarea class=text cols=75 rows=10 wrap=virtual name=text value="Здесь исходник"></textarea><br>
</td><td><font size="-1">text2</font><br><textarea class=text cols=75 rows=10 wrap=virtual name=text2></textarea><br>
</td></tr></table>
<input type=button onclick="Paste();" value="Paste &uarr;">
<input type=button onclick="Copy();" value="Copy &darr;">
<input type=button onclick="ClearForm();return 0;" value="Clear &darr;&uarr;">
<p><input type="submit" value="go"></p>
</form>
</center>
1 CnupT45rus
 
29.04.15
07:46
Пробую так:
HTML=ЭлементыФормы.ПолеHTMLДокумента;
    Form=HTML.Документ.forms.namedItem("form");
    сообщить(form);
    Если Form<>Неопределено Тогда
        Попытка
            Form.submit();
        
        Исключение
        КонецПопытки;
    КонецЕсли;

Не выходит :(
2 Jonny_Khomich
 
29.04.15
07:47
может просто запустить процедуру, которая выполняется после запуска кнопки?
3 CnupT45rus
 
29.04.15
07:51
"может просто запустить процедуру, которая выполняется после запуска кнопки?"

а можно поподробнее


И да, код php зашифрован :(
4 Jonny_Khomich
 
29.04.15
07:57
(3) это была просто идея. узнавай у того, кто это делал.
5 CnupT45rus
 
29.04.15
08:03
Jonny_Khomich, В любом случаи спасибо :)

Друзья, может есть какие нибудь идеи?
6 alexoren
 
29.04.15
08:49
(3) как это php зашифрован? Первый раз такое слышу
7 alexoren
 
29.04.15
08:50
(4) при этом php процедуру php ты никак не выполнишь, она на сервере по запросу выполняется.
8 alexoren
 
29.04.15
08:51
(5) ты можешь получить данные из элементов, а потом из 1C послать POST запрос к скрипту на сервере
9 alexoren
 
29.04.15
08:52
(8) а это есть в форуме
v8: POST запрос из 1С
10 alexoren
 
29.04.15
08:54
(0) "Paste();" это функция не php, js. Форма вероятно ajax,

Обращайся к полям и POST запрос.
11 CnupT45rus
 
29.04.15
08:59
"(3) как это php зашифрован? Первый раз такое слышу"

Как то так:(
"nРЃьшJУу>ъЙ—ѕтRя9їЯѓNїЌЏфрЇЗO•Э«џWFЭЋ†Рђc{‘—‹8yн]~"M@?Яй ѓаqGояDTв—H5Њ|>rщЇ.?уЪWџ ^ш{0Xш‰з|їЌ¬Г€Ѕ\Lў‹{Й3@ИпEЭ~аswЬtпїют‡Оn^щgџнэ"
Шифровали Zend'ом
12 CnupT45rus
 
29.04.15
09:07
Забыл уточнить, что мне нужно нажать это <input type="submit" value="go">
13 alexoren
 
29.04.15
09:12
(11) а всё понял. Да какая нафиг разница? Он на сервере исполняется. <input type="submit" value="go"> - это чисто отправляет форму, делает POST запрос. Выцепляй значения полей и делай POST запрос. Php в данном случае для тебя "чёрный ящик".
14 alexoren
 
29.04.15
09:17
(12) и не просто POST запрос, а именно в скрипт action="index.php"
15 Котокот
 
29.04.15
10:01
(0) ПолеHTMLДокумента.document.getElementById('IDКНопки').click()
16 Котокот
 
29.04.15
10:02
Если ID у кнопки нет, то найти ее перебором по типу элемента, ну или другим способом.
17 Котокот
 
29.04.15
10:03
Хотя можно еще проще, там же при нажатии кнопок вызываются функции яваскрипта, можно сразу их вызывать из 1С.
18 palpetrovich
 
29.04.15
10:08
Извините что встреваю, не подскажите, а можно-ли избавиться от "ошибок сценария " пр иоткрытии страницы?
http://www.fayloobmennik.net/4835319
19 palpetrovich
 
29.04.15
10:10
+(18) не та ссылка :)
20 palpetrovich
 
29.04.15
10:11
21 CnupT45rus
 
29.04.15
10:18
Извините что встреваю, не подскажите, а можно-ли избавиться от "ошибок сценария " пр иоткрытии страницы?
Видел на инфостарте статью, поищите там
22 CnupT45rus
 
29.04.15
10:22
"Если ID у кнопки нет, то найти ее перебором по типу элемента, ну или другим способом."
Котокот, а можно поподробнее
23 Котокот
 
29.04.15
10:30
(22) ДокументHTML.ПолучитьЭлементыПоИмени (HTMLDocument.GetElementsByName)
ДокументHTML (HTMLDocument)
ПолучитьЭлементыПоИмени (GetElementsByName)
Синтаксис:

ПолучитьЭлементыПоИмени(<Имя>)
Параметры:

<Имя> (обязательный)

Тип: Строка.
Имя требующегося элемента (коллекции элементов).
Возвращаемое значение:

Тип: КоллекцияЭлементовHTML.

Описание:

Возвращает коллекцию элементов HTML документа с заданным именем.

Доступность:

Тонкий клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение(клиент), мобильное приложение(сервер).
Примечание:

Для элемента HTML имена элементов не чувствительны к регистру.
--------------------------------------------------------------------------------

     Методическая информация
24 Котокот
 
29.04.15
10:30
Ищем все элементы с именем button, находим нужный (первый, второй или третий) и кликаем его.
25 CnupT45rus
 
29.04.15
10:41
нужно нажать кнопку
<p><input type="submit" value="go"></p>
26 CnupT45rus
 
29.04.15
10:48
Не робит

//Индусский код БЛИН :(
    Документ = ЭлементыФормы.ПолеHTMLДокумента.Документ;
    type="submit";
    ЭлементыHTMLДокумента = Документ.GetElementsByName(type);
    Сообщить (ЭлементыHTMLДокумента);
    Для Каждого ТекЭлементHTMLДокумента Из ЭлементыHTMLДокумента Цикл
        ТекЭлементHTMLДокумента.click();
        
        
        
        
    КонецЦикла;
27 Serginio1
 
29.04.15
10:58
28 Serginio1
 
29.04.15
11:00
function getElementsByAttrib(attrib) {
    return document.querySelectorAll('[' + attrib + ']');
}
var elements = getElementsByAttrib('type="submit"');
MySubmit = elements[0]';
29 lalolo
 
29.04.15
11:07
(26) Элемент можно искать ...ByName, можно ...ById. Чуть выше товарищ написал ...ByAttrib, что судя по всему и является самым подходящим вариантом.
30 alexoren
 
29.04.15
11:13
31 Котокот
 
29.04.15
11:57
(26) type="submit";
поменять на
type="input";
32 Serginio1
 
29.04.15
13:49
(31) См 27

function get_submit_button() {
    var inputs = document.getElementsByTagName('INPUT');
    for(var i=0; i < inputs.length; i++) {
        var inp = inputs[i];
        if(inp.type != 'submit') continue;
        if(inp.value == 'Invoeren' && inp.name == 'submit') {
            return inp;
            break; // exits the loop
        }
    }
    return false;
}

function click_submit() {
    var inp = get_submit_button();
    if(inp) inp.click();
}
33 Котокот
 
29.04.15
14:02
(32) А я за что
34 Serginio1
 
29.04.15
14:31
(33) ты за GetElementsByName
http://www.wisdomweb.ru/HDOMd/byname.php
35 CnupT45rus
 
29.04.15
15:29
Пробую так, опять не выходит.

Процедура Кнопка2Нажатие(Кнопка)
        ScrptCtrl= Новый COMОбъект ("MSScriptControl.ScriptControl");
        ScrptCtrl.Language="jscript";
        ScrptCtrl.AddCode("function get_submit_button() {
        |var inputs = document.getElementsByTagName('INPUT');
        |for(var i=0; i < inputs.length; i++) {
        |    var inp = inputs[i];
        |    if(inp.type != 'submit') continue;
        |        if(inp.value == 'go') {
        |            return inp;
        |            break; // exits the loop
        |            }
        |            }
        |            return false;
        |            }
        |            
        |            function click_submit() {
        |                var inp = get_submit_button();
        |                if(inp) inp.click();
        |                    }
        |                    ");
        
        
КонецПроцедуры
36 Котокот
 
29.04.15
15:35
(34) А, ну то я имею в виду одно, а пишу другое )
37 Serginio1
 
29.04.15
15:47
(35) Зачем тебе скрипт?

Будь проще

Документ = ЭлементыФормы.ПолеHTMLДокумента.Документ;

ЭлементыHTMLДокумента =Документ.querySelectorAll("[type="""submit"""]");

Для Каждого ТекЭлементHTMLДокумента Из ЭлементыHTMLДокумента Цикл
        ТекЭлементHTMLДокумента.click();
    
    КонецЦикла;

Либо если один такой элемент или первый то
ЭлементHTMLДокумента =Документ.querySelector("[type="""submit"""]");

ЭлементHTMLДокумента.click();
38 Serginio1
 
29.04.15
15:52
ЭлементHTMLДокумента =Документ.querySelector("input[type="""submit"""]");

ЭлементHTMLДокумента.click();
39 CnupT45rus
 
29.04.15
18:16
Serginio1, спасибо огромное, и вообще, всем всем спасибо. Заработало. Рабочий код:

Документ = ЭлементыФормы.ПолеHTMLДокумента.Документ;    
СТ = "submit";    
ЭлементHTMLДокумента = Документ.querySelector("input[type="""+СТ+"""]");
ЭлементHTMLДокумента.click();

А про скрипт, решил попробовать, так как он тоже должен сработать, кот то логически верен, но чего то не хватает
40 Serginio1
 
29.04.15
18:27
(39) Тьфу ты ну да
ЭлементHTMLДокумента =Документ.querySelector("input[type=""submit""]");
41 Котокот
 
29.04.15
21:13
(39) Поздравляем!
42 CnupT45rus
 
29.04.15
21:32
Друзья, а вот еще один интересный вопрос. Интересно, а как теперь вытащить текст из html? конкретно "text2": (<textarea class=text cols=75 rows=10 wrap=virtual name=text2></textarea>)

Так не работает,  
текстHtml = ЭлементыФормы.ПолеHTMLДокумента.Документ.GetElementsByName("text2").ПолучитьТекст();
    Сообщить(текстHtml);

И понятно что не работает и не должно тк COMОбъект, а как можно?
43 Serginio1
 
29.04.15
22:13
44 Котокот
 
29.04.15
22:20
текстHtml = ЭлементыФормы.ПолеHTMLДокумента.Документ.GetElementsByName("text2").innerHTML;
45 CnupT45rus
 
29.04.15
22:29
"текстHtml = ЭлементыФормы.ПолеHTMLДокумента.Документ.GetElementsByName("text2").innerHTML;"

Поле объекта не обнаружено (innerHTML)
46 Serginio1
 
29.04.15
23:00
Типа такого
текстHtml = ЭлементыФормы.ПолеHTMLДокумента.Документ.GetElementsByName("text2")[0].innerHTML;

http://shpargalkablog.ru/2013/04/value-input-javascript.html
47 Serginio1
 
29.04.15
23:13
Можно попробовать такую конструкцию

Элементы=ЭлементыФормы.ПолеHTMLДокумента.Документ.GetElementsByName("text2");
iter = Элементы.GetEnumerator();


Текст="";
    Если iter.MoveNext() Тогда
        Текст=iter.Current.innerHTML;
    КонецЕсли;
48 CnupT45rus
 
30.04.15
06:36
Попробовал обе конструкции:

Элементы=ЭлементыФормы.ПолеHTMLДокумента.Документ.GetElementsByName("text2");
    iter = Элементы.GetEnumerator();


    Текст="";
    Если iter.MoveNext() Тогда
        Текст=iter.Current.innerHTML;
    КонецЕсли;

Говорит:
{Форма.Форма.Форма(113)}: Метод объекта не обнаружен (GetEnumerator)
    iter = Элементы.GetEnumerator();


И так:
текстHtml = ЭлементыФормы.ПолеHTMLДокумента.Документ.GetElementsByName("text2")[0].innerHTML;

Говорит:
{Форма.Форма.Форма(105)}: Получение элемента по индексу для значения не определено
    текстHtml = ЭлементыФормы.ПолеHTMLДокумента.Документ.GetElementsByName("text2")[0].innerHTML;
49 CnupT45rus
 
30.04.15
06:48
Ребята, получилось так, но это блин опять индусский код какой то получился :)


//Да БЛИН, опять индусский код
    Документ = ЭлементыФормы.ПолеHTMLДокумента.Документ;
    Name="text2";
    ЭлементыHTMLДокумента = Документ.GetElementsByName(Name);
    
    Для Каждого ТекЭлементHTMLДокумента Из ЭлементыHTMLДокумента Цикл
        АВ = ТекЭлементHTMLДокумента.Value;
        Сообщить (АВ);
    КонецЦикла;
50 Serginio1
 
30.04.15
10:40
(49) 1C не поддерживает свойства массивы.
По аналогии с Net можно попробовать ЭлементыHTMLДокумента.get_Item(0)
или
ЭлементыHTMLДокумента.getItem(0


Конструкция
Для Каждого ТекЭлементHTMLДокумента Из
на самом деле вызывает [DISPID=-4] для получения IEnumVARIANT
51 mzelensky
 
30.04.15
10:46
Чет вы как-то мудрите сильно...в большенстве случаев делается все гораздо проще (хотя конечно все зависит от конкретного случая).

Открываешь браузер "Огненая Лисичка", включаешь там анализатор\дебагер, заходишь на нужную тебе страничку и тыкаешь нужную кнопку. Далее смотришь какие запросы формируются. СКОРЕЕ всего увидишь там нужную тебе ссылку\команду которая запускает нужное действие. Ну и далее запускаешь это все в 1С-ке.
52 Serginio1
 
30.04.15
10:47
Судя по https://developer.mozilla.org/en-US/docs/Web/API/NodeList

Methods
item ( idx )Returns an item in the list by its index, or null if the index is out-of-bounds; can be used as an alternative to simply accessing nodeList[idx] (which instead returns  undefined when idx is out-of-bounds).
53 mzelensky
 
30.04.15
10:48
(51) + Я таким макаром с десятокдругой сайтов распарсил\обработал :)

Но повторюсь - все зависит от конкретного сайта и более детально нужно смотреть по факту
54 Serginio1
 
30.04.15
10:49