Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.11.2013, 20:38   #1
Pcrepair
Форумчанин
 
Регистрация: 04.01.2011
Сообщений: 260
По умолчанию Получить данные из TWebBrowser

Добрый день. Есть следующая ситуация:
- форма на форме ТВебБраузер
- в Твебраузер загружается страница поисковика (Яндекс например)
- в поисковике вводится поисковый запрос и нажимается кнопка "Найти" (это все веб-страница, элементы ХТМЛ-кода типа ФОРМ, ввводится и нажимается все вручную)
- поисковик выдает ответ, все как обычно

Необходимо: при нажатии кнопки "Найти" на веб-странице данные из окна ввода на веб-странице перенести в строковую переменную (чтоб не потерялись)
конечно можно сделать все наоборот: в ЕДИТ на форме программы ввести текст запроса, нажать на кнопку на форме программы и передать данные в Твебраузер, но исходя из эргономики это нецелесообразно, снижает удобство работы с программой

Вопрос:
- подскажите в какую сторону искать, информация в инете в основном как передать данные или управление в браузер а не наоборот
Pcrepair вне форума Ответить с цитированием
Старый 04.11.2013, 21:09   #2
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

а зачем вам "строковая переменная"?
eval вне форума Ответить с цитированием
Старый 04.11.2013, 21:32   #3
Pcrepair
Форумчанин
 
Регистрация: 04.01.2011
Сообщений: 260
По умолчанию

(чтоб не потерялись)
Pcrepair вне форума Ответить с цитированием
Старый 04.11.2013, 21:38   #4
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

они и в браузере не теряются
eval вне форума Ответить с цитированием
Старый 04.11.2013, 21:53   #5
Pcrepair
Форумчанин
 
Регистрация: 04.01.2011
Сообщений: 260
По умолчанию

а мне нужно и далее чтоб не терялись, когда браузер закроется
Pcrepair вне форума Ответить с цитированием
Старый 05.11.2013, 00:16   #6
alextrof94
Форумчанин
 
Регистрация: 16.03.2013
Сообщений: 599
По умолчанию

А не проще работать через TIdHttp?
Например кидаешь на форму TEdit, чтоб туда вводился поисковый запрос.
По кнопке "искать", через TIdHttp делаешь запрос поисковику.
Вырываешь из результатов строки которые нужны простым парсингом.
Так и программа быстрее работать будет, да визуализация ни к чему, как я понял.
alextrof94$gmail.com
alextrof94 вне форума Ответить с цитированием
Старый 05.11.2013, 01:08   #7
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Не совсем понял что автору надо, откуда данные доставать? Наверно надо просто погуглить что-то типа "webbrowser delphi get html", чтобы достать HTML страницы и оттуда уже доставать что надо?

Вообще я бы избегал WebBrowser'а. Либо idhttp/synapse если запросы не сложные, либо какая-нибудь обертка над Хромиумом. Вроде TChromium есть для дельфи. Еще Человек_Борща PhantomJS рекламировал тут http://www.programmersforum.ru/showthread.php?p=1283165.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 05.11.2013, 02:58   #8
GoodDA
фрилансер
Форумчанин
 
Аватар для GoodDA
 
Регистрация: 18.07.2008
Сообщений: 107
По умолчанию

Надо обрабатывать событие веббраузера BeforeNavigate, и в этот момент получать значение элемента формы

Вот пример заполнения элемента формы на страничке, получение значения можно сделать по аналогии

Код:
function TForm1.BrowserPost(WebBrowser: tWebBrowser; ovv, ovv_name, ovv_value: string): boolean;
var
  iDoc: IHtmlDocument2; i: integer; ov: OleVariant; iDisp: IDispatch;
  iColl: IHTMLElementCollection;
  iInputElement: IHTMLInputElement;
  iInputTextElement: HTMLInputTextElement;
  iSelectElement: IHTMLSelectElement;
  iradio: IHTMLOptionButtonElement;
  Document: IHTMLDocument2;
  rbTestList: IHTMLElementCollection;
  rbTest: IHTMLOptionButtonElement;
  nn:integer;
  ins:Boolean;
begin
  BrowserPost := false;
  WebBrowser.ControlInterface.Document.QueryInterface(IHtmlDocument2, iDoc);
  if not assigned(iDoc) then begin ShowMessage(' !!!??? Nothing dowloaded ... '); Exit; end;

      if uppercase(ovv) = 'INPUT' then
      begin
        ov := 'INPUT';
        IDisp := iDoc.all.tags(ov);
        if assigned(IDisp) then
        begin
          IDisp.QueryInterface(IHTMLElementCollection, iColl);
          if assigned(iColl) then
            for i := 1 to iColl.Get_length do
            begin
              iDisp := iColl.item(pred(i), 0);
              iDisp.QueryInterface(IHTMLInputElement, iInputElement);
              if assigned(iInputElement) then
                if uppercase(iInputElement.Get_name) = uppercase(ovv_name) { 'phone_number'} then
                begin
                  iInputElement.Set_value(ovv_value); //Get_value
                  BrowserPost := true;
                end;
            end;
        end;
      end else
        if uppercase(ovv) = 'TEXTAREA' then
        begin
          ov := 'TEXTAREA';
          IDisp := iDoc.all.tags(ov);
          if assigned(IDisp) then
          begin
            IDisp.QueryInterface(IHTMLElementCollection, iColl);
            if assigned(iColl) then
              for i := 1 to iColl.Get_length do
              begin
                iDisp := iColl.item(pred(i), 0);
                iDisp.QueryInterface(HTMLInputTextElement, iInputTextElement);
                if assigned(iInputTextElement) then
                  if uppercase(iInputTextElement.name) = uppercase(ovv_name) {'msg'} then
                  begin
                    iInputTextElement.value := ovv_value;
                    BrowserPost := true;
                  end;
              end;
          end;
        end;
end;

//*******пример использования
BrowserPost(wb1, 'INPUT','Name_element', 'value')
GoodDA вне форума Ответить с цитированием
Старый 05.11.2013, 08:49   #9
Pcrepair
Форумчанин
 
Регистрация: 04.01.2011
Сообщений: 260
По умолчанию

всем спасибо, видимо надо копать BeforeNavigate2
все что мне нужно(пока) это получить строковое значение из INPUT страницы при нажатии на кнопку "НАЙТИ" (это страница яндекса например) и сохранить его

почеМу из INPUT? потому что ПМ предлагает выбор при вводе первого слова поискового запроса, в ручную копировать слишком неудобно, нужно эту операцию автоматизировать


попробовал использовать BeforeNavigate2 и сразу полезли исключения на код ( ИДЕ = ХЕ3)

E2171 Variable 'I' inaccessible here due to optimization
E2171 Variable 'Src' inaccessible here due to optimization
E2171 Variable 'Temp' inaccessible here due to optimization (недоступные здесь за счет оптимизации) - это в модуле ComObj procedure GetIDsOfNames

Код:
procedure TMain.Wbbr_SMBeforeNavigate2(ASender: TObject; const pDisp: IDispatch;
  const URL, Flags, TargetFrameName, PostData, Headers: OleVariant;
  var Cancel: WordBool);
var
I,J:integer;
begin   (*действия перед перезагрузкой страницы*)
  if Wbbr_SM.OleObject.Document.all.tags('FORM').Length = 0 then
    begin
      Exit;
    end;
end;
что бы это могло быть?

Последний раз редактировалось Pcrepair; 05.11.2013 в 09:14.
Pcrepair вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
получить данные с бд megostudent БД в Delphi 5 14.05.2013 11:30
получить HTML-код из TWebBrowser - Delphi Андрей.12 Работа с сетью в Delphi 4 21.08.2011 04:03
Получить ответ сервера TWebBrowser. .while Работа с сетью в Delphi 2 13.07.2010 20:51
Как получить текст HTML Документа из TWebBrowser без тегов Marsel737 Общие вопросы Delphi 10 28.11.2009 08:47
twebbrowser Как получить ссылки на которые ведут картинки? darkcoder Работа с сетью в Delphi 1 07.03.2008 14:10