Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.63/32: Рейтинг темы: голосов - 32, средняя оценка - 4.63
32 / 29 / 12
Регистрация: 04.03.2013
Сообщений: 896

Заполнение веб формы в WebBrowser

29.06.2013, 21:03. Показов 6969. Ответов 24
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!
Ищу информацию по заполнению веб формы, которая открывается в WebBrowser.
В программе есть Edit'ы, TWebBrowser и кнопка. После их заполнения, пользователь жмет на кнопку и веб форма заполняется. Больше никаких действий не нужно.
Помогите реализовать свою идею, пожалуйста. Очень давно над этим бьюсь. Работаю в С++ Builder.

Код веб формы:
Кликните здесь для просмотра всего текста
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
<table style="padding: 2px 5px 5px 2px; vertical-align: top;">
        <tr>
            <td>
                <strong>URL:</strong><br />
                <div class="small">Только http://, https:// или ftp://</div>
            </td>
            <td>
                <input type="text" name="bm_url" id="bm_url" maxlength="500" value="http://" style="width:320px;" />
            </td>
        </tr>
        <tr>
            <td>
                <strong>Заголовок:</strong><br />
                <div class="small" id="url_maxchars">макс. 100 знака</div>
                <div class="small hidden" id="url_charsleft">Вы можете ввести еще <span id="url_charsleft_value"></span>&nbsp;знаков</div>               
            </td>
            <td>
                <input type="text" name="bm_description" id="bm_description" class="title" value="" style="width:320px;" />
                 <a href="javascript:addurl_mark_top_fav();"><img src="img/top_favorite_on.gif" border="0" id="top_fav_marker" alt="als Top-Favorit markieren" title="als Top-Favorit markieren" style="padding-top: 2px;" /></a>
            </td>
        </tr>
 
        <tr>
            <td valign="top">
                <strong>Комментарий:</strong>
                <div class="small" id="bookmark_maxchars">макс. 200 знака</div>
                <div class="small hidden" id="bookmark_charsleft">Вы можете ввести еще <span id="bookmark_charsleft_value"></span>&nbsp;знаков</div>
            </td>
            <td>
                <textarea id="bm_notice" name="bm_notice" style="width:320px;" rows="5"></textarea>
            </td>
        </tr>
 
        <tr>
            <td>
                <strong>Теги:</strong>
                <div class="small">ключевые слова<br /> (разделять пробелом)</div>
            </td>
            <td>
                <input type="text" name="bm_tags" id="addurl_tags" maxlength="400" value="" style="width:320px;" autocomplete="off" onkeypress="return noenter()" /><br />
                <div id="suggest"></div>
                <div id="tag_suggestions"></div>
            </td>
        </tr>
        
            <tr>
                <td valign="top">
                    <strong>Статус:</strong>
                </td>
                <td>
                    <label><input type="radio" id="bm_status_public" class="radio" name="bm_status" value="public" checked  />публичная (стандартная опция)</label>
                    <br />
                    <label><input type="radio" id="bm_status_private"  class="radio" name="bm_status" value="private"   />Скрытая (только Вы видите эту закладку)</label>
                </td>
            </tr>
            
            <tr style="display:none;">
                <td valign="top"><strong>:</strong></td>
                <td>
                
                <input type="checkbox" id="twitter_checkbox"  name="twitter" value="yes" onchange="toggle_twitter_data()" onclick="this.blur();" /> <label for="twitter_checkbox"><img src="./img/twitter.png" style="margin-bottom: -2px" /></label> <span>(<a href="javascript:void(0)" onclick="toggle_twitter_what()"></a>)</span>
                    <div class="twitter_data twitter_hint hidden" id="twitter_what"><h3></h3> 
                        
                    </div>
                
                    <div id="twitter_data" class="twitter_data  hidden">
                        <div class="twitter_userdata hidden" id="twitter_userdata">
                            <input type="text" id="twitter_username" name="session[username_or_email]" value="" onfocus="twitter_input_reset(this, '')" onblur="twitter_input_fill(this, '')"  /> 
                            <input type="text" name="twitter_password2" id="twitter_password2"  value="" onfocus="twitter_chn_psw()" /><input type="password" id="twitter_password" name="twitter_password" class="hidden" onblur="twitter_chn_psw2()" />
                            <div class="twitter_privacy"><input type="checkbox" name="twitter_save_data" checked="checked" value="yes" id="twitter_checkbox" />  <br /><span>(<a href="javascript:void(0)" onclick="toggle('twitter_privacy')"></a>)</span></div>
                        </div>
                        
                        <div class="twitter_hint hidden" id="twitter_privacy"><h3></h3>
                            
                        </div>
                        
                        <div id="twitter_message_wrapper" style="position: relative">
                            <div class="small twitter_charsleft hidden" id="twitter_charsleft">Вы можете ввести еще <span id="twitter_charsleft_value"></span>&nbsp;знаков</div>
                            <div class="small twitter_charsleft hidden" id="twitter_chars"></div>
                            <div class="twitter_preview hidden" id="twitter_preview" /></div>
                            <textarea name="twitter_message" id="twitter_message2" rows="3" onfocus="twitter_input_reset(this, '')" onblur="twitter_input_fill(this, '')"></textarea>
                            <input type="button" value="" onclick="twitter_preview()" id="twitter_preview_btn" />
                            <input type="button" value="" onclick="twitter_preview()" id="twitter_edit_btn" class="hidden" />
                        </div>
                        
                    </div>
                    
                </td>
            </tr>
            
            <tr>
                <td valign="top">
                    <strong>Are you a human?</strong>
                </td>
                <td>
                    <script language="javascript">
                    document.write("20 - 7 =");
                    </script>
                    <input type="text" name="code" style="width: 20px;" />
                    <input type="text" name="password2" style="display:none" />
                </td>
            </tr>
            
        <tr>
            <td>&nbsp;</td>
            <td>
            
                                
                <script language="javascript">
                    document.write('<input name="addurl" value="сохранить закладку" class="button" type="button" id="addurl-submit" onclick="submit()" />');
                </script>
 
                <noscript>
                    <input name="addurl" value="сохранить закладку" type="submit" class="button" />
                </noscript>
                
            </td>
        </tr>


На сайт захожу так:

C++
1
WebBrowser1->Navigate("http://www.mister-wong.ru/add_url/");
Помогите с кодом для заполнение полей в данном случае. Буду очень признателен.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
29.06.2013, 21:03
Ответы с готовыми решениями:

WebBrowser заполнение формы содержащей Ajax
Добрый день! Не уверен в той ветке пишу или нет поэтому не серчайте. Проблема следцющая, я хочу написать програмку которая будет...

Заполнение полей формы через элемент webbrowser
Через элемент WebBrowser открываю сайт На сайте форма На форме есть текстовые поля, чекбоксы и поля с выбором значений С первыми...

Заполнение веб формы
Всем, привет. Столкнулся с такой проблемой, пытаюсь заполнить поля на сайте, но не могу увидеть форму ввода логина и пароля. попытка с...

24
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
30.06.2013, 21:20
Заполнение форм CppWebBrowser
0
32 / 29 / 12
Регистрация: 04.03.2013
Сообщений: 896
30.06.2013, 21:28  [ТС]
Цитата Сообщение от Avazart Посмотреть сообщение
Видел эту тему, спасибо. Не пойму какие компоненты нужны для этого кода.

Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
void __fastcall TForm1::ClickButton(String Name){// нажатие кнопки на форме. Name - имя кнопки в html коде
  TCppWebBrowser *WB=CWB;
  if( WB->Document )    {
    TComInterface<IHTMLDocument2> pDocument;
    WB->Document->QueryInterface(IID_IHTMLDocument2, (LPVOID*)&pDocument);
    if( pDocument )        {
      TComInterface<IHTMLElementCollection> pCollection;
      pDocument->get_all(&pCollection);
      if( pCollection )            {
        TComInterface<IDispatch> pDisp;
        pCollection->item(TVariant(WideString(Name)), TVariant(0), &pDisp);
        if( pDisp )                {
          TComInterface<IHTMLElement> pElement;
          pDisp->QueryInterface(IID_IHTMLElement, (LPVOID*)&pElement);
          if( pElement )                    {
            pElement->click();
          }
        }
      }
    }
  }
} //---------------------------------------------------------------------------------
void __fastcall TForm1::FillForm(String Name, String Data){
// заполнение поля на форме. Name - имя поля в html коде. 
  TCppWebBrowser *WB=CWB;
  CComQIPtr<IHTMLDocument2, &IID_IHTMLDocument2>                  pDoc;
  CComQIPtr<IHTMLElementCollection, &IID_IHTMLElementCollection>  pColl;
  CComQIPtr<IDispatch, &IID_IDispatch>                            pTmpDisp;
  CComQIPtr<IHTMLInputElement, &IID_IHTMLInputElement>            pElement;
  CComQIPtr<IDispatch, &IID_IDispatch>                            pDisp;
  if ( SUCCEEDED (WB->Document->QueryInterface(IID_IHTMLDocument2, (LPVOID*)&pDoc)))    {
    if ( SUCCEEDED (pDoc->get_all(&pColl)))                 {
      if ( SUCCEEDED (pColl->item(TVariant(WideString(Name)), TVariant(0), &pDisp))) {
        pElement = pDisp;
        pElement->put_value(WideString(Data));
      }
    }
  }
} //---------------------------------------------------------------------------------
Так же выбирается Radio Button. каждой позиции соответствует значение - найти его можно в html коде.
Заполнение TEXTAREA
Код C++

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
void __fastcall TForm1::Button5Click(TObject *Sender)
{
  IHTMLDocument2 *pHTMLDocument = NULL;
  if (SUCCEEDED(WB->Document->QueryInterface(IID_IHTMLDocument2,(LPVOID*)&pHTMLDocument)))
  {
    if(pHTMLDocument!= NULL ) {
      IHTMLElementCollection *pAll = NULL;
      if ( SUCCEEDED ( pHTMLDocument -> get_all ( &pAll ) ) && pAll ) {
        TVariant vIndex = 0;
        IDispatch *pDisp1 = NULL;
        TVariant vName1 = "txtSM"; // ?? ???? ???? <TEXTAREA name=text ....
        WideString iniString = "текст смски"; //  TEXTAREA
        if ( SUCCEEDED ( pAll -> item ( vName1, vIndex, &pDisp1 ) ) && pDisp1 ) {
          IHTMLTextAreaElement *pInput = NULL;
          if ( SUCCEEDED ( pDisp1 -> QueryInterface ( IID_IHTMLTextAreaElement, ( LPVOID* )&pInput ) ) && pInput ) {
            pInput -> put_value ( iniString );
            pInput -> Release ();
          }
          pDisp1 -> Release ();
        }
      }
      pAll -> Release ();
    }
  }
}
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
30.06.2013, 21:30
Цитата Сообщение от iiwanc Посмотреть сообщение
Не пойму какие компоненты нужны для этого кода.
Браузер...
0
32 / 29 / 12
Регистрация: 04.03.2013
Сообщений: 896
30.06.2013, 22:03  [ТС]
Цитата Сообщение от Avazart Посмотреть сообщение
Браузер...
спасибо
а как создать FillForm? В той ветке форума, на которую вы дали ссылку вроде бы это объясняется, но все равно не понял.
и про TEXTAREA не пойму что за зверь
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
01.07.2013, 02:03
FillForm() функция что непонятно ?

Добавлено через 2 минуты
TEXTAREA это из HTML

http://citforum.ru/internet/html3.2ex/gl_82.shtml

Добавлено через 2 часа 30 минут
Заполнение полей на сайте
0
32 / 29 / 12
Регистрация: 04.03.2013
Сообщений: 896
01.07.2013, 15:40  [ТС]
Цитата Сообщение от Avazart Посмотреть сообщение
FillForm() функция что непонятно ?
а как эту функцию создать или вручную прописать?
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
01.07.2013, 15:42
Цитата Сообщение от iiwanc Посмотреть сообщение
а как эту функцию создать или вручную прописать?
Ну можете ногами прописать если умеете...
0
32 / 29 / 12
Регистрация: 04.03.2013
Сообщений: 896
01.07.2013, 15:59  [ТС]
Цитата Сообщение от Avazart Посмотреть сообщение
Ну можете ногами прописать если умеете...
вы уж меня не пинайте сильно объясните, пожалуйста, подробнее. первый раз связываю программу с интернетом, до этого были простенькие программы
0
01.07.2013, 16:01

Не по теме:

По русски тоже первый раз пытаетесь изъяснятся ?

0
32 / 29 / 12
Регистрация: 04.03.2013
Сообщений: 896
01.07.2013, 16:05  [ТС]
Цитата Сообщение от Avazart Посмотреть сообщение

Не по теме:

По русски тоже первый раз пытаетесь изъяснятся ?

я имею ввиду...что просто скопировать полностью код и вставить или произвести какие-то действия для того, чтобы эта функция появилась в коде. Вроде того: двойной клик по Button1 и открывается код в котором уже присутствует:
C++
1
void __fastcall TForm1::Button1Click(TObject *Sender)
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
01.07.2013, 16:06
Создать метод самому.
0
32 / 29 / 12
Регистрация: 04.03.2013
Сообщений: 896
01.07.2013, 16:11  [ТС]
Цитата Сообщение от Avazart Посмотреть сообщение
Создать метод самому.
Что в форму добавить? Вот форма (если все правильно делаю):
Миниатюры
Заполнение веб формы в WebBrowser  
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
01.07.2013, 16:27
Цитата Сообщение от iiwanc Посмотреть сообщение
Что в форму добавить? Вот форма (если все правильно делаю):
Нет неправильно...- закрываешь Builder, берешь любую книгу по С++ для начинающих и долго и нудно читаешь пока не изучишь, потом берешь книгу Aрхангельского и делаешь тоже самое ... и только после этого берись писать что-то в Builder.
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
01.07.2013, 17:00
Цитата Сообщение от iiwanc Посмотреть сообщение
Вроде того: двойной клик по Button1 и открывается код в котором уже присутствует
При двойном щелчке на компоненте появляется "заготовка" для написания функции обработчика, - это сервис среды (Borland Builder). Но так же можно создать функцию и самостоятельно. Попробуйте через ClassExolorer на классе TForm "New Method", - введете название своей функции, нажмете Apply - и появится аналогичная "заготовка".
1
32 / 29 / 12
Регистрация: 04.03.2013
Сообщений: 896
05.07.2013, 20:43  [ТС]
Цитата Сообщение от nick42 Посмотреть сообщение
При двойном щелчке на компоненте появляется "заготовка" для написания функции обработчика, - это сервис среды (Borland Builder). Но так же можно создать функцию и самостоятельно. Попробуйте через ClassExolorer на классе TForm "New Method", - введете название своей функции, нажмете Apply - и появится аналогичная "заготовка".
вроде бы с этим разобрался. спасибо большое
здесь создал тему по Делфи : При работе приложения - ошибка "IOHandler value is not valid" пытаюсь разобраться и там и в С++. На Делфи получилось скомпилировать программу. Теперь возник другой вопрос, как этот же код применить в С++?
Понимаю, что нужно его переделать для С++, но по каким принципам это делается, не пойму. Не подскажите?
0
1408 / 572 / 127
Регистрация: 31.10.2011
Сообщений: 1,960
05.07.2013, 20:58
попробуй использовать IdSSLIOHandlerSocketOpenSSL
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
05.07.2013, 21:00
https://www.cyberforum.ru/blog... .html#a_10
1
32 / 29 / 12
Регистрация: 04.03.2013
Сообщений: 896
06.07.2013, 11:46  [ТС]
Цитата Сообщение от Avazart Посмотреть сообщение
еще пытаюсь разобраться в вашем коде из темы Заполнение полей на сайте

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <atl\atlbase.h>
//---------------------------------------------------------------------------
void __fastcall TForm1::FillForm(String FieldName, String FieldText)
{
// заполнение поля на форме. FieldName - имя поля в html коде.
CComQIPtr<IHTMLDocument2, &IID_IHTMLDocument2>                  pDoc;
CComQIPtr<IHTMLElementCollection, &IID_IHTMLElementCollection>  pColl;
CComQIPtr<IDispatch, &IID_IDispatch>                            pTmpDisp;
CComQIPtr<IHTMLInputElement, &IID_IHTMLInputElement>            pElement;
CComQIPtr<IDispatch, &IID_IDispatch>                            pDisp;
 
if (SUCCEEDED(CppWebBrowser1->Document->QueryInterface(IID_IHTMLDocument2, (LPVOID*)&pDoc)) )
    {
     if(SUCCEEDED (pDoc->get_all(&pColl) ) )
        {
        if(SUCCEEDED (pColl->item(TVariant(WideString(FieldName)), TVariant(0), &pDisp) ) )
            {
                pElement = pDisp;
                pElement->put_value(FieldText.w_str() );
            }
        }
    }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
String Url= "https://www.google.com.ua";
CppWebBrowser1->Navigate(Url.w_str());
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
FillForm("q","Искать инфу");
}
выдает одну ошибку: "F1003 Error directive: You must copy ATL files from an earlier version of BDS [$(BDS)\include\atl\*.*] to use ATL"
Работаю в C++Builder XE4

Что-то требуется подключить?
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
06.07.2013, 12:00
Цитата Сообщение от iiwanc Посмотреть сообщение
Что-то требуется подключить?
Обновил там в теме...
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
06.07.2013, 12:00
Помогаю со студенческими работами здесь

Заполнение веб формы в WPF
в WinForms это выглядит примерно так: // логин webBrowser1.Document.GetElementById(&quot;login&quot;).SetAttribute(&quot;value&quot;,...

Заполнение веб-формы приложением
Добрый день. Нужна подсказка в следующем вопросе: Имеется веб-страница с одним текстовым полем и одной кнопкой. Хочу написать приложение...

Заполнение веб-полей формы из файла
Подскажите плиз. нужно заполнять поля на веб странице. начало загружаем веб страницу: procedure TForm1.FormCreate(Sender: TObject); ...

Заполнение формы на веб сайте через программу
Как автоматически заполнить поля на веб сайте .Заранее спасибо.

Заполнение полей веб-формы сайта в Chrome
Доброго времени суток, уважаемые участники форума. Очень давно сижу на просторах сети и пытаюсь найти более-менее понятную...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Вывод данных через динамический список в справочнике
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru