Имя: Пароль:
1C
1С v8
Не обновляется ПолеHtmlДокумента
0 Dendroid92
 
19.02.16
16:50
Здравствуйте! Пишу сюда для получения помощи по такому вопросу. Есть некий сайт, html которого я передаю в ПолеHtmlДокумента, далее нахожу в этом html нужные мне поля и подставляю туда значения, после чего программно нажимаю на кнопку поиска, однако глубоко было мое разочарование, когда оказалось, что html не обновился и я получается парсил старое html, а не обновленное. Вот сам вопрос: Как в ПолеHtmlДокумента нажать на кнопку и получить новую html в ответ на нажатие кнопки, чтобы парсить дальше обновленную html?
1 sash-ml
 
19.02.16
17:09
событие ПриНажатии сделай или ПриИзменении
в нем как-то так.
сс = Элементы.ПолеНТМЛ.Document.getElementById("fooId").value
2 Юрий Лазаренко
 
19.02.16
17:10
Элементы.ПолеНТМЛ.Document.getElementById("fooId").click()
3 Dendroid92
 
19.02.16
17:18
(2) я так и сделал, но html обновляется только после окончания выполнения процедуры
4 Dendroid92
 
19.02.16
17:21
(2) а мне нужно, чтобы после Элементы.ПолеНТМЛ.Document.getElementById("fooId").click() я получил обновленное html и дальше парсил ее в этой же процедуре
5 Asmody
 
19.02.16
17:26
Возможны два варианта:
1) при нажатии на кнопку срабатывает обычный submit формы. В этом случае логичнее посмотреть action и method формы и отправлять запрос через ОтправитьДляОбработки
2) используется ajax. В этом случае на кнопку или форму повешено событие, в обработчике которого реализована логика обмена с сервером. Надо читать исходник на javascript и пытаться повторить логику запроса.
6 sash-ml
 
19.02.16
17:33
(4) парсить НТМЛ дело неблагодарное
текст Элемента не обязательно обновится.
получать данные из поля ПолеНТМЛ лучше по ДОМ структуре
+(5) после клика, если там ajax, то тебе нужно запилить обработчик ПриИзменении, и в нем обходить ДОМ объект. по другому никак.
7 Dendroid92
 
19.02.16
17:49
(5) (6) Вот сайт http://elibrary.ru/authors.asp, в нем мне нужно проставить либо SPIN-code (если есть на форме в 1С), либо же вводить Фамилию и Организацию. Посмотрел JavaScript, там получается обычный submit (вариант 1). action = "authors.asp"
method = "post"
как теперь нужно написать ОтправитьДляОбработки (первый раз сталкиваюсь, поэтому сильно не ругайте)
8 sash-ml
 
19.02.16
18:56
заголовки такие

POST http://elibrary.ru/authors.asp HTTP/1.1
Referer    http://elibrary.ru/authors.asp
Host    elibrary.ru

строка запроса

authors_all=&pagenum=&authorbox_name=&selid=&orgid=&orgadminid=&surname=&codetype=SPIN&codevalue=1234567890&town=&countryid=&orgname=&rubriccode=&sortorder=0&order=0
9 Dendroid92
 
20.02.16
00:15
(8) Написал такой код:

<pre>
Сервер = "http://elibrary.ru";;
    Ресурс = "/authors.asp";
    HTTP =  Новый HTTPСоединение(Сервер);
    ФайлЗапроса = ПолучитьИмяВременногоФайла();
    ТекстовыйФайл = Новый ТекстовыйДокумент;
    ТекстовыйФайл.УстановитьТекст("authors_all=&pagenum=&authorbox_name=&selid=&orgid=&orgadminid=&surname=Мезенова&codetype=SPIN&codevalue=&town=&countryid=&orgname=&rubriccode=&sortorder=0&order=0");
    ТекстовыйФайл.Записать(ФайлЗапроса, КодировкаТекста.UTF8);
    ФайлРезультата = ПолучитьИмяВременногоФайла();
    ЗаголовокHTTP = Новый Соответствие();
    ЗаголовокHTTP.Вставить();
    HTTP.ОтправитьДляОбработки(ФайлЗапроса, Ресурс, ФайлРезультата, ЗаголовокHTTP);
    Ответ = Новый ТекстовыйДокумент();
    Ответ.Прочитать(ФайлРезультата, КодировкаТекста.UTF8);
    ТекстОтвета = Ответ.ПолучитьТекст();
    УдалитьФайлы(ФайлЗапроса);
    УдалитьФайлы(ФайлРезультата);
</pre>

Из Вашего сообщения не понятно как нужно вставить заголовки. И если требуется передать параметр surname, то надо писать параметр в '' или ""?
10 Dendroid92
 
20.02.16
12:30
(8) Прошлый вариант выдавал ошибку, покапался, вроде исправил на такой код:
<pre>
Сервер = "elibrary.ru";;

    Ресурс = "/authors.asp";

    HTTP =  Новый HTTPСоединение(Сервер);

    ФайлЗапроса = ПолучитьИмяВременногоФайла();

    ТекстовыйФайл = Новый ТекстовыйДокумент;

    ТекстовыйФайл.УстановитьТекст("&authors_all=&pagenum=&authorbox_name=&selid=&orgid=&orgadminid=&surname=&codetype=SPIN&codevalue=&town=&countryid=&orgname=&rubriccode=&sortorder=0&order=0");

    ТекстовыйФайл.Записать(ФайлЗапроса, КодировкаТекста.UTF8);

    ФайлРезультата = ПолучитьИмяВременногоФайла();

    ЗаголовокHTTP = Новый Соответствие();

    ЗаголовокHTTP.Вставить("POST", "elibrary.ru/authors.asp");
    ЗаголовокHTTP.Вставить("Referer", "elibrary.ru/authors.asp");
    ЗаголовокHTTP.Вставить("Host", "elibrary.ru/authors.asp");

    HTTP.ОтправитьДляОбработки(ФайлЗапроса, Ресурс, ФайлРезультата, ЗаголовокHTTP);

    Ответ = Новый ТекстовыйДокумент();

    Ответ.Прочитать(ФайлРезультата, КодировкаТекста.UTF8);

    ТекстОтвета = Ответ.ПолучитьТекст();

    УдалитьФайлы(ФайлЗапроса);

    УдалитьФайлы(ФайлРезультата);
</pre>
Пришел ответ:
<pre>
<head>
<title>Object moved</title>
</head>
<body>
<h1>Object Moved</h1>
This object may be found <a HREF="/start_session.asp?rpage=http%3A%2F%2Felibrary%2Eru%2Fauthors%2Easp">here</a>.
</body>
</pre>
По идее же должен был вернуться список авторов?
AdBlock убивает бесплатный контент. 1Сергей